Swing/ScrollPaneUseChildTextComponentFocus のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ScrollPaneUseChildTextComponentFocus へ行く。
- 1 (2022-09-12 (月) 04:05:36)
- 2 (2024-06-23 (日) 06:23:24)
- category: swing folder: ScrollPaneUseChildTextComponentFocus title: NimbusLookAndFeelで子テキストコンポーネントのフォーカスボーダーを親JScrollPaneに適用する tags: [JScrollPane, JTextComponent, NimbusLookAndFeel, Focus, UIManager] author: aterai pubdate: 2022-09-12T03:52:41+09:00 description: NimbusLookAndFeelでJScrollPaneのビューポートにテキストコンポーネントがひとつだけ配置されている場合、そのフォーカスボーダーを親JScrollPaneに適用するかを切り替えます。 image: https://drive.google.com/uc?id=1wHPpe9jRQbjdxqHXxX0WlG6cOm48FUzL
概要
NimbusLookAndFeel
でJScrollPane
のビューポートにテキストコンポーネントがひとつだけ配置されている場合、そのフォーカスボーダーを親JScrollPane
に適用するかを切り替えます。
Screenshot
![Swing/ScrollPaneUseChildTextComponentFocus screenshot](https://ateraimemo.com/swing/scrollpaneusechildtextcomponentfocus/screenshot.png)
Advertisement
サンプルコード
StringBuilder buf = new StringBuilder();
IntStream.range(0, 100).forEach(i -> buf.append(i).append(LF));
String str = buf.toString();
JScrollPane scroll = new JScrollPane(new JTextArea(str));
String key = "ScrollPane.useChildTextComponentFocus";
JCheckBox check = new JCheckBox(key, UIManager.getBoolean(key));
check.addActionListener(e -> {
UIManager.put(key, ((JCheckBox) e.getSource()).isSelected());
SwingUtilities.updateComponentTreeUI(scroll);
});
JPanel p = new JPanel(new GridLayout(1, 2));
p.add(new JScrollPane(new JTextArea(str)));
p.add(scroll);
View in GitHub: Java, Kotlin解説
ScrollPane.useChildTextComponentFocus: true
NimbusLookAndFeel
のデフォルトJScrollPane
のビューポートにテキストコンポーネントがひとつだけ配置されている場合、そのフォーカスボーダーを親JScrollPane
に適用するSynthScrollPaneUI
を継承するScrollPaneUI
でのみ有効で、BasicScrollPaneUI
を使用するMetalLookAndFeel
などでは無効
ScrollPane.useChildTextComponentFocus: false
JScrollPane
のビューポートにテキストコンポーネントがひとつだけ配置されている場合でも、そのフォーカスボーダーを親JScrollPane
に適用しない- テキストコンポーネントが
JLayer
でラップされている場合でも無効で内部のテキストコンポーネントにフォーカスボーダーが適用される