使用 JColorChooser 在 JTable 的行上设置颜色

Setting the Color on the row of the JTable using JColorChooser

我是 Swing 新手。几周前我才开始使用 Swing,但在某个时候卡住了……

我设计了一个 JTable 有一些行点击(右)它会打开一个弹出菜单,其中有 "CHANGE ROW COLOR" 选项(JMenuItem),点击 JColorChooser 打开,用户可以选择颜色,相同的颜色将设置为所选行。

可以吗?如何?

enter image description here

enter image description here

如果您希望能够分别为每一行着色,那么一种方法是将颜色作为数据的一部分存储在 TableModel 中。所以你需要在模型中添加颜色作为一列。

但是您不想在 table 的视图中显示此列,因此您需要将其从视图中删除:

table.removeColumn( table.getColumn(...) );

接下来您需要为 table 添加自定义渲染。一种方法是为整行添加渲染。查看 Table Row Rendering 以获取此方法的示例。

所以渲染的基本代码应该是这样的:

Color background = table.getTableModel.getValueAt(row, ???);

if (background != null)
    c.setBackground( background );

当您选择显示颜色时,您需要将颜色保存到 TableModel:

table.getTableModel().setValueAt(color, table.getSelectedRow(), ???);

另一种方法是将行和颜色保存在 map<Integer, Color>

(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;
            }
        });