TITLE:JListで異なる高さのセルを使用

JListで異なる高さのセルを使用

編集者:Terai Atsuhiro
作成日:2006-05-15
更新日:2021-07-29 (木) 03:56:43

概要

JListのレンダラーにJTextAreaを使って、異なる高さのセルを作成します。

#screenshot

サンプルコード

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;

解説

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

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

コメント