Swing/ColumnSelection のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ColumnSelection へ行く。
- 1 (2008-03-11 (火) 15:42:16)
- 2 (2012-06-28 (木) 02:07:57)
- 3 (2013-02-20 (水) 13:41:20)
- 4 (2013-02-20 (水) 15:19:51)
- 5 (2013-03-30 (土) 21:16:15)
- 6 (2014-09-14 (日) 22:04:33)
- 7 (2014-10-19 (日) 19:05:20)
- 8 (2015-11-12 (木) 22:01:06)
- 9 (2017-05-10 (水) 15:58:47)
- 10 (2018-05-01 (火) 21:13:13)
- 11 (2020-04-24 (金) 18:34:11)
- 12 (2021-10-26 (火) 23:59:10)
TITLE:JTableHeaderをクリックしてそのColumnのセルを全選択
JTableHeaderをクリックしてそのColumnのセルを全選択
編集者:Terai Atsuhiro
作成日:2005-04-04
更新日:2021-10-26 (火) 23:59:10
概要
JTableHeaderをクリックしたとき、そのColumn以下にあるセルを全選択します。
#screenshot
サンプルコード
JTextArea textArea = new JTextArea("ComponentPopupMenu Test");
textArea.setComponentPopupMenu(new TextComponentPopupMenu(textArea));
table = new JTable(model) {
private final Color evenColor = new Color(250, 250, 250);
@Override
public Component prepareRenderer(TableCellRenderer tcr, int row, int column) {
Component c = super.prepareRenderer(tcr, row, column);
if(isCellSelected(row, column)) {
c.setForeground(getSelectionForeground());
c.setBackground(getSelectionBackground());
}else{
c.setForeground(getForeground());
c.setBackground((row%2==0)?evenColor:getBackground());
}
return c;
}
};
table.setCellSelectionEnabled(true);
final JTableHeader header = table.getTableHeader();
header.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if(!check.isSelected()) return;
if(table.isEditing()) {
table.getCellEditor().stopCellEditing();
}
int col = header.columnAtPoint(e.getPoint());
table.changeSelection(0, col, false, false);
table.changeSelection(table.getRowCount()-1, col, false, true);
}
});
- &jnlp;
- &jar;
- &zip;
解説
上記のサンプルでは、JTableHeaderにマウスリスナーを追加し、JTableHeader#columnAtPoint(Point)メソッドを使って、クリックされたColumnを取得するようになっています。
Column全体の選択は、changeSelectionメソッドを二回使用することで行っています。
参考リンク
- JTableに行ヘッダを追加
- 行ヘッダをクリックして行の全選択