使用JColorChooser在JTable的行上设置Color
我是Swing的新手。 几周之前我刚开始玩Swing并且我在某些时候陷入困境……
我设计了一个JTable
,点击(右)有一些行,打开一个弹出菜单,其中有“CHANGE ROW COLOR”选项( JMenuItem
),点击JColorChooser
打开,用户可以选择颜色,相同的颜色将设置为选定的行。
有可能吗? 怎么样?
在此处输入图像描述
在此处输入图像描述
如果您希望能够分别为每一行着色,那么一种方法是将Color存储为TableModel中数据的一部分。 因此,您需要将Color作为列添加到模型中。
但是您不希望在表的视图中显示此列,因此您需要将其从视图中删除:
table.removeColumn( table.getColumn(...) );
接下来,您需要为表添加自定义呈现。 一种方法是为整行添加渲染。 查看表行渲染以获取此方法的示例。
所以渲染的基本代码是这样的:
Color background = table.getTableModel.getValueAt(row, ???); if (background != null) c.setBackground( background );
当您显示颜色时,您需要将颜色保存到TableModel:
table.getTableModel().setValueAt(color, table.getSelectedRow(), ???);
另一种方法是将行和颜色保存在map
(use table.getSelectedRow() )
要从JColorchooser捕获颜色,请使用: Color selectedColor = myColorChooser.getSelectionModel().getSelectedColor();
然后,修改默认渲染器:
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (listOfColor.containKey(row)) { c.setBackground(listOfColor.get(row)); } DefaultTableCellRenderer centerRenderer = (DefaultTableCellRenderer) c; centerRenderer.setHorizontalAlignment(SwingConstants.CENTER); return c; } });