Swing/EmptySelectionList のバックアップソース(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/EmptySelectionList へ行く。
- 1 (2007-04-13 (金) 21:02:17)
- 2 (2008-05-24 (土) 02:29:06)
- 3 (2010-04-03 (土) 04:43:21)
- 4 (2010-04-06 (火) 02:38:16)
- 5 (2013-03-30 (土) 21:23:36)
- 6 (2013-10-18 (金) 15:57:35)
- 7 (2014-11-27 (木) 17:12:33)
- 8 (2015-03-03 (火) 14:17:01)
- 9 (2016-05-26 (木) 14:54:13)
- 10 (2016-09-25 (日) 01:15:32)
- 11 (2017-11-04 (土) 00:07:47)
- 12 (2018-09-07 (金) 16:37:13)
- 13 (2018-11-16 (金) 18:28:07)
- 14 (2018-11-24 (土) 17:07:11)
- 15 (2020-11-07 (土) 02:22:15)
- 16 (2022-10-30 (日) 18:58:33)
TITLE:JListを選択不可にする #navi(../) #tags(JList, ListCellRenderer, ListSelectionModel) RIGHT:Posted by &author(aterai); at 2005-03-14 * JListを選択不可にする [#j04d5de5] `JList`を選択出来ないように設定します。 - &jnlp; - &jar; - &zip; #ref(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTMI697_II/AAAAAAAAAYs/EhpPEXnw1bc/s800/EmptySelectionList.png) ** サンプルコード [#g97b104e] #code(link){{ list2.setFocusable(false); list2.setSelectionModel(new DefaultListSelectionModel() { public boolean isSelectedIndex(int index) { return false; } }); class EmptySelectionRenderer implements ListCellRenderer { private final ListCellRenderer renderer; public EmptySelectionRenderer(ListCellRenderer renderer) { this.renderer = renderer; } public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { return renderer.getListCellRendererComponent( list, value, index, false, false); } } }} ** 解説 [#a0f3861e] - 左 -- `JList#setEnabled(false)`で編集不可にしているため、選択も不可ですが、文字色が薄くなります。 - 中 -- `JList#setFocusable(false)`でフォーカス無し、かつ`ListSelectionModel#isSelectedIndex`が常に`false`なセレクションモデルを設定して、選択不可にしています。 - 右 -- 常に各セルを選択状態でもフォーカスも無いものとして描画するセルレンダラーを設定して、選択不可のように見せかけています。 ---- `LookAndFeel`が`Nimbus`の場合、編集不可にした`JList`の文字色を以下のような方法で変更することができます。 #code{{ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.plaf.*; public class DisabledTextForegroundList { public JComponent makeUI() { JList list = new JList(makeTestModel()); //list.putClientProperty("Nimbus.Overrides", d); //list.putClientProperty("Nimbus.Overrides.InheritDefaults", false); list.setEnabled(false); JSplitPane p = new JSplitPane(); p.setLeftComponent(new JScrollPane(new JList(makeTestModel()))); p.setRightComponent(new JScrollPane(list)); p.setResizeWeight(.5); return p; } private static ListModel makeTestModel() { DefaultListModel m = new DefaultListModel(); m.addElement("aaaaaaaaaaaa"); m.addElement("bbbbb"); return m; } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { createAndShowGUI(); } }); } public static void createAndShowGUI() { try { for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) if ("Nimbus".equals(laf.getName())) UIManager.setLookAndFeel(laf.getClassName()); //UIDefaults d = new UIDefaults(); UIDefaults d = UIManager.getLookAndFeelDefaults(); d.put("List:\"List.cellRenderer\"[Disabled].textForeground", new ColorUIResource(Color.RED)); } catch(Exception e) { e.printStackTrace(); } JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().add(new DisabledTextForegroundList().makeUI()); f.setSize(320, 240); f.setLocationRelativeTo(null); f.setVisible(true); } } }} ** 参考リンク [#df459cec] - [[JListの任意のItemを選択不可にする>Swing/DisabledItem]] ** コメント [#b5251fbd] #comment