TITLE:JComboBoxのItemを左右にクリップして配置

JComboBoxのItemを左右にクリップして配置

編集者:Terai Atsuhiro
作成日:2005-09-12
更新日:2023-07-21 (金) 17:12:28

概要

JComboBoxのItemにテキストをクリップして左右に分けて配置します。

#screenshot

サンプルコード

 class MyCellRenderer extends JPanel implements ListCellRenderer {
   private final JLabel lbl1 = new JLabel();
   private final JLabel lbl2 = new JLabel();
   private final Color  cfc  = UIManager.getColor("ComboBox.foreground");
   private final Color  cbc  = UIManager.getColor("ComboBox.background");
   private final Color  csfc = UIManager.getColor("ComboBox.selectionForeground");
   private final Color  csbc = UIManager.getColor("ComboBox.selectionBackground");
   private final Color  cdfc = UIManager.getColor("ComboBox.disabledForeground");
   public MyCellRenderer(Dimension dim, int rightw) {
     super(new BorderLayout());
     lbl1.setOpaque(true);
     lbl2.setOpaque(true);
     this.setOpaque(true);
     lbl1.setBorder(BorderFactory.createEmptyBorder(0,2,0,0));
     lbl2.setPreferredSize(new Dimension(rightw, 0));
     lbl2.setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
     this.add(lbl1, BorderLayout.CENTER);
     this.add(lbl2, BorderLayout.EAST);
     this.setPreferredSize(dim);
   }
   public Component getListCellRendererComponent(
                     JList list, Object value, int index,
                     boolean isSelected, boolean cellHasFocus) {
     LRItem item = (LRItem)value;
     lbl1.setText(item.getLeftText());
     lbl2.setText(item.getRightText());
     lbl1.setBackground(isSelected ? csbc : cbc);
     lbl2.setBackground(isSelected ? csbc : cbc);
     this.setBackground(isSelected ? csbc : cbc);
     lbl1.setForeground(isSelected ? csfc : cfc);
     lbl2.setForeground(cdfc);
     return this;
   }
 }
  • &jnlp;
  • &jar;
  • &zip;

解説

上記のサンプルでは、JLabelを二つ並べたJPanelをレンダラーにすることで、Itemに設定した文字列を左右に表示しています。このため文字列が長い場合、JLabelがこれを自動的にクリップしてくれます。

参考リンク

コメント