NimbusLookAndFeelで子テキストコンポーネントのフォーカスボーダーを親JScrollPaneに適用する
Total: 821
, Today: 3
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
NimbusLookAndFeel
でJScrollPane
のビューポートにテキストコンポーネントがひとつだけ配置されている場合、そのフォーカスボーダーを親JScrollPane
に適用するかを切り替えます。
Screenshot
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
のJViewport
にテキストコンポーネントがひとつだけ配置されている場合、そのフォーカスボーダーを親JScrollPane
に適用するSynthScrollPaneUI
を継承するScrollPaneUI
でのみ有効で、BasicScrollPaneUI
を使用するMetalLookAndFeel
などでは無効
ScrollPane.useChildTextComponentFocus: false
JScrollPane
のJViewport
にテキストコンポーネントがひとつだけ配置されている場合でも、そのフォーカスボーダーを親JScrollPane
に適用しない- テキストコンポーネントが
JLayer
でラップされている場合でも無効で内部のテキストコンポーネントにフォーカスボーダーが適用される