概要

JTableの文字列以外の場所がクリックされた場合、そのセルが選択されないようにします。

サンプルコード

// @see SwingUtilities2.pointOutsidePrefSize(...)
private static Rectangle getCellRect2(JTable table, int row, int col) {
  TableCellRenderer tcr = table.getCellRenderer(row, col);
  Object value = table.getValueAt(row, col);
  Component cell = tcr.getTableCellRendererComponent(
      table, value, false, false, row, col);
  Dimension itemSize = cell.getPreferredSize();
  Rectangle cellBounds = table.getCellRect(row, col, false);
  cellBounds.width = itemSize.width;
  return cellBounds;
  // FontMetrics fm = table.getFontMetrics(table.getFont());
  // Object o = table.getValueAt(row, col);
  // int w = fm.stringWidth(o.toString()) + 16 + 2 + 2;
  // Rectangle rect = table.getCellRect(row, col, true);
  // rect.setSize(w, rect.height);
  // return rect;
}
View in GitHub: Java, Kotlin

解説

  • 0列目のNameカラムのセル中にあるアイコンと文字列の上でクリックされた場合のみ、そのセルが選択されるよう設定
  • JTable.putClientProperty("Table.isFileList", Boolean.TRUE)を設定して0列目の文字列以外がクリックされても選択されないように変更
    • Table.isFileListWindowsLookAndFeelのみ有効?

参考リンク

コメント