Swing/ClippedLRComboBox のバックアップ差分(No.13)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/ClippedLRComboBox へ行く。
- 1 (2005-09-12 (月) 13:00:56)
- 2 (2005-09-12 (月) 23:29:51)
- 3 (2006-02-27 (月) 15:33:00)
- 4 (2006-04-08 (土) 20:51:26)
- 5 (2006-04-12 (水) 19:37:05)
- 6 (2006-07-07 (金) 12:26:23)
- 7 (2007-01-11 (木) 14:20:21)
- 8 (2007-09-16 (日) 00:28:21)
- 9 (2008-06-17 (火) 17:50:19)
- 10 (2008-08-13 (水) 15:12:54)
- 11 (2011-03-13 (日) 01:49:33)
- 12 (2012-02-03 (金) 14:26:04)
- 13 (2012-02-03 (金) 16:02:16)
- 14 (2013-03-24 (日) 21:29:51)
- 15 (2014-11-28 (金) 16:24:34)
- 16 (2015-03-01 (日) 16:08:08)
- 17 (2016-05-26 (木) 14:35:58)
- 18 (2017-08-12 (土) 21:43:45)
- 19 (2018-02-24 (土) 19:51:30)
- 20 (2018-04-02 (月) 17:50:03)
- 21 (2020-03-31 (火) 13:50:03)
- 22 (2021-10-08 (金) 17:41:41)
- 23 (2023-07-21 (金) 17:12:28)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JComboBoxのItemを左右にクリップして配置 #navi(../) RIGHT:Posted by [[aterai]] at 2005-09-12 *JComboBoxのItemを左右にクリップして配置 [#td747fe0] JComboBoxのItemにテキストをクリップして左右に分けて配置します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(http://lh5.ggpht.com/_9Z4BYR88imo/TQTJSTVvNXI/AAAAAAAAAUI/RNbSh6R4xi8/s800/ClippedLRComboBox.png) **サンプルコード [#n26d00a1] #code{{ class MultiColumnCellRenderer extends JPanel implements ListCellRenderer { private final JLabel leftLabel = new JLabel(); private final JLabel rightLabel = new JLabel(); private int prevwidth = -1; public MultiColumnCellRenderer(int rightWidth) { super(new BorderLayout()); this.setOpaque(true); this.setBorder(BorderFactory.createEmptyBorder(1,1,1,1)); this.setName("List.cellRenderer"); leftLabel.setOpaque(false); leftLabel.setBorder(BorderFactory.createEmptyBorder(0,2,0,0)); rightLabel.setOpaque(false); rightLabel.setBorder(BorderFactory.createEmptyBorder(0,2,0,2)); rightLabel.setForeground(Color.GRAY); rightLabel.setHorizontalAlignment(SwingConstants.RIGHT); rightLabel.setPreferredSize(new Dimension(rightWidth, 0)); this.add(leftLabel); this.add(rightLabel, BorderLayout.EAST); } @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { @Override public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { LRItem item = (LRItem)value; leftLabel.setText(item.getLeftText()); rightLabel.setText(item.getRightText()); leftLabel.setFont(list.getFont()); rightLabel.setFont(list.getFont()); leftLabel.setForeground( isSelected?list.getSelectionForeground():list.getForeground()); this.setBackground( isSelected?list.getSelectionBackground():list.getBackground()); if(index<0) { Dimension d = getSize(); if(d.width!=prevwidth) { list.setPreferredSize(new Dimension(d.width, 0)); prevwidth = d.width; } leftLabel.setForeground(list.getForeground()); this.setOpaque(false); }else{ leftLabel.setForeground( isSelected?list.getSelectionForeground():list.getForeground()); this.setOpaque(true); this.setBackground( isSelected?list.getSelectionBackground():list.getBackground()); } return this; } @Override public void updateUI() { prevwidth = -1; super.updateUI(); this.setName("List.cellRenderer"); } } }} **解説 [#y1b479cc] 上記のサンプルでは、JLabelを二つ並べたJPanelをレンダラーにすることで、Itemに設定した文字列を左右に表示しています。このため文字列が長い場合、JLabelがこれを自動的にクリップしてくれます。 **参考リンク [#w60ad6dd] -[[JComboBoxのItemを左右に配置>Swing/LRComboBox]] --こちらはhtmlのtableタグを使用して同様の表示(クリップはしない)を行っています。 **コメント [#n7dbe41e] - ポップアップリストが更新されなくなって?、うまくクリップできなくなっていたのを修正。 -- [[aterai]] &new{2008-08-13 (水) 15:14:12}; - 選択時の文字色を修正(Windows 7 などへの対応)。 -- [[aterai]] &new{2012-02-03 (金) 14:28:48}; #comment