TITLE:JTableのセルにJCheckBoxを表示して行背景色を変更

Posted by at 2008-07-14

JTableのセルにJCheckBoxを表示して行背景色を変更

JTableのセルに表示されているJCheckBoxがチェックされていれば、その行の背景色を変更します。

  • &jnlp;
  • &jar;
  • &zip;
CheckedRowColor.png

サンプルコード

model.addTableModelListener(new TableModelListener() {
  @Override public void tableChanged(TableModelEvent e) {
    if(e.getType()==TableModelEvent.UPDATE) {
      rowRepaint(table, table.convertRowIndexToView(e.getFirstRow()));
    }
  }
});
JTable table = new JTable(model) {
  @Override public Component prepareEditor(
        TableCellEditor editor, int row, int column) {
    Component cmp = super.prepareEditor(editor, row, column);
    if(convertColumnIndexToModel(column) == BOOLEAN_COLUMN) {
      JCheckBox c = (JCheckBox)cmp;
      c.setBackground(c.isSelected()? Color.ORANGE:getBackground());
    }
    return cmp;
  }
  @Override public Component prepareRenderer(
        TableCellRenderer renderer, int row, int column) {
    Component c = super.prepareRenderer(renderer, row, column);
    Boolean isChecked = (Boolean) model.getValueAt(
      convertRowIndexToModel(row), BOOLEAN_COLUMN);
    c.setForeground(getForeground());
    c.setBackground(isChecked? Color.ORANGE:getBackground());
    return c;
  }
};
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JTableのprepareEditor、prepareRendererをオーバーライドしてセルエディタや行の背景色を変更しています。

参考リンク

コメント