使用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; } });