• title: CellEditorのBorderを変更 tags: [JTable, TableCellEditor, Border] author: aterai pubdate: 2005-08-22T08:08:31+09:00 description: Borderを変更したJTextFieldを、JTableのデフォルトセルエディタとして設定します。

概要

Borderを変更したJTextFieldを、JTableのデフォルトセルエディタとして設定します。

サンプルコード

JTextField field = new JTextField();
field.setBorder(BorderFactory.createLineBorder(Color.RED, 2));
table.setDefaultEditor(Object.class, new DefaultCellEditor(field));
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、BorderFactory.createLineBorder(Color.RED, 2)を設定したJTextFieldを使用するDefaultCellEditorを作成し、JTable#setDefaultEditor(...)で、Object.classのデフォルトエディタとして設定しています。


JTable#setDefaultEditor(...)を使用せずに、JTable#prepareEditor(...)をオーバーライドして、セルエディタとして使用するコンポーネントの背景色やBorderを変更することもできます。

JTable table = new JTable(model) {
  @Override public Component prepareEditor(
      TableCellEditor editor, int row, int column) {
    Component c = super.prepareEditor(editor, row, column);
    if(c instanceof JCheckBox) {
      JCheckBox b = (JCheckBox)c;
      b.setBorderPainted(true);
      b.setBackground(getSelectionBackground());
    }else if(c instanceof JComponent && convertColumnIndexToModel(column)==1) {
      ((JComponent)c).setBorder(
        BorderFactory.createLineBorder(Color.GREEN, 2));
    }
    return c;
  }
};

参考リンク

コメント