2021-11-18 (木) 11:29:54
  • category: swing folder: CellHighlight title: JTableのセルのハイライト tags: [JTable, TableCellRenderer, MouseListener, MouseMotionListener] author: aterai pubdate: 2005-03-21T07:27:38+09:00 description: JTableのセル上にマウスカーソルが存在する場合、その背景色を変更します。 image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTIqY941CI/AAAAAAAAATI/gk-sbbRE5gw/s800/CellHighlight.png

概要

JTableのセル上にマウスカーソルが存在する場合、その背景色を変更します。
http://terai.s55.xrea.com/swing/cellhighlight/screenshot.png

サンプルコード

View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JTableMouseListenerMouseMotionListenerを追加してマウスカーソルが乗っているセルを取得し、セルレンダラーでこれを参照してその背景色を変更しています。
  • JTable#prepareRenderer(...)メソッドをオーバーライドする方法もある
    #spanend
    #spanadd
    class HighlightableTable extends JTable {
    #spanend
      private final HighlightListener highlighter;
    #spanadd
    
    #spanend
      public HighlightableTable(TableModel model) {
        super(model);
        highlighter = new HighlightListener(this);
        addMouseListener(highlighter);
        addMouseMotionListener(highlighter);
      }
    #spanadd
    
    #spanend
      @Override public Component prepareRenderer(
            TableCellRenderer r, int row, int column) {
        Component c = super.prepareRenderer(r, row, column);
        if (highlighter.isHighlightableCell(row, column)) {
          c.setBackground(Color.RED);
        } else if (isRowSelected(row)) {
          c.setBackground(getSelectionBackground());
        } else {
          c.setBackground(Color.WHITE);
        }
        return c;
      }
    #spanadd
    }
    #spanend
    #spanadd
    

参考リンク

コメント