Swing/CheckedRowColor のバックアップソース(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/CheckedRowColor へ行く。
- 1 (2008-07-14 (月) 14:18:45)
- 2 (2009-06-04 (木) 20:11:24)
- 3 (2009-12-14 (月) 23:22:08)
- 4 (2009-12-16 (水) 21:25:57)
- 5 (2010-07-26 (月) 14:08:14)
- 6 (2011-03-08 (火) 18:55:35)
- 7 (2011-03-13 (日) 22:02:33)
- 8 (2012-11-21 (水) 21:38:43)
- 9 (2012-11-23 (金) 04:40:08)
- 10 (2013-01-19 (土) 20:21:46)
- 11 (2013-07-31 (水) 23:37:33)
- 12 (2013-09-08 (日) 02:34:20)
- 13 (2013-10-04 (金) 15:37:24)
- 14 (2014-11-01 (土) 00:46:09)
- 15 (2014-11-16 (日) 04:44:35)
- 16 (2014-11-25 (火) 03:03:31)
- 17 (2015-12-12 (土) 02:22:22)
- 18 (2016-06-24 (金) 16:29:25)
- 19 (2017-09-21 (木) 04:43:17)
- 20 (2017-11-02 (木) 15:34:40)
- 21 (2019-02-28 (木) 18:34:40)
- 22 (2020-12-15 (火) 10:31:16)
- 23 (2022-08-20 (土) 22:15:25)
- 24 (2023-05-19 (金) 17:12:42)
TITLE:JTableのセルにJCheckBoxを表示して行背景色を変更 #navi(../) *JTableのセルにJCheckBoxを表示して行背景色を変更 [#m1cec761] Posted by [[terai]] at 2008-07-14 #contents **概要 [#t2ae1ee3] JTableのセルに表示されているJCheckBoxがチェックされていれば、その行の背景色を変更します。 -&jnlp; -&jar; -&zip; #screenshot **サンプルコード [#i0e63eb4] #code{{ 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) { //System.out.println("JTable: prepareEditor"); 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; } }; }} **解説 [#h9e64740] 上記のサンプルでは、JTableのprepareEditor、prepareRendererをオーバーライドしてセルエディタや行の背景色を変更しています。 ---- 以下のように、TableCellRendererやCellEditorを利用して、JTableをオーバーライドしない方法(([[TWiki . Javadesktop . SwingLabsImperialRules>http://wiki.java.net/bin/view/Javadesktop/SwingLabsImperialRules]]))もあります。 #code{{ private static JTable makeTable2(final DefaultTableModel model) { final JTable table = new JTable(model); TableColumnModel columns = table.getColumnModel(); for(int i=0;i<columns.getColumnCount();i++) { columns.getColumn(i).setCellRenderer(new RowColorTableRenderer( table.getDefaultRenderer(model.getColumnClass(i)))); } DefaultCellEditor dce = (DefaultCellEditor)table.getDefaultEditor(model.getColumnClass(BOOLEAN_COLUMN)); final JCheckBox check = (JCheckBox)dce.getComponent(); check.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { System.out.println("JCheckBox: focusGained"); JCheckBox c = (JCheckBox)e.getSource(); c.setBackground(c.isSelected()?Color.ORANGE:table.getBackground()); } }); table.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { int col = table.columnAtPoint(e.getPoint()); if(table.convertColumnIndexToModel(col)==BOOLEAN_COLUMN) { System.out.println("JTable: mousePressed"); int row = table.rowAtPoint(e.getPoint()); Boolean isChecked = (Boolean) model.getValueAt(table.convertRowIndexToModel(row), BOOLEAN_COLUMN); check.setBackground(isChecked?Color.ORANGE:table.getBackground()); } } }); return table; } static class RowColorTableRenderer implements TableCellRenderer { private final Color evenColor = new Color(240, 240, 255); private final TableCellRenderer renderer; public RowColorTableRenderer(TableCellRenderer renderer) { this.renderer = renderer; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); TableModel model = table.getModel(); Boolean isChecked = (Boolean) model.getValueAt(table.convertRowIndexToModel(row), BOOLEAN_COLUMN); c.setForeground(table.getForeground()); c.setBackground(isChecked?Color.ORANGE:table.getBackground()); return c; } } }} **参考リンク [#y4aec741] -[[Swing - JTable-Row color issue>http://forum.java.sun.com/thread.jspa?threadID=5309552]] **コメント [#c673ea03] #comment