TITLE:JListで異なる高さのセルを使用
#navi(../)
*JListで異なる高さのセルを使用 [#v5f5cc63]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2006-05-15~
更新日:&lastmod;

#contents

**概要 [#va017644]
*JListのレンダラーにJTextAreaを使って、異なる高さのセルを作成します。 [#e29d00be]

#screenshot

**サンプルコード [#r38aaded]
 class TextAreaRenderer extends JTextArea implements ListCellRenderer {
   private final Border border = new DotBorder(2,2,2,2);
   private final Color evenColor = new Color(230,255,230);
   public Component getListCellRendererComponent(
       JList list, Object object, int index,
       boolean isSelected, boolean cellHasFocus) {
     setText((object==null) ? "" : object.toString());
     setBorder(cellHasFocus ? border 
                 : BorderFactory.createEmptyBorder(2,2,2,2));
     if(isSelected) {
       setBackground(list.getSelectionBackground());
       setForeground(list.getSelectionForeground());
     }else{
       setBackground(index%2==0 ? evenColor : list.getBackground());
       setForeground(list.getForeground());
     }
     return this;
   }
 }
 
 private DefaultListModel makeList() {
   DefaultListModel model = new DefaultListModel();
   model.addElement("一行");
   model.addElement("一行目\n二行目");
   model.addElement("一行目\n二行目\n三行目");
   model.addElement("四行\n以上ある\nテキスト\nの場合");
   return model;
 }

-&jnlp;
-&jar;
-&zip;

**解説 [#deb3ece5]
ListCellRendererにJTextAreaを使用することで、\nで複数行を表現することができるセルを作成しています。

JTextAreaにセルフォーカスがある状態を表現するために、EmptyBorderを継承して作成したDotBorderを使用しています。

//**参考リンク
**コメント [#h396eb78]
#comment