使用JColorChooser在JTable的行上设置Color

时间:2017-08-04 14:14:49

标签: java swing jtable

我是Swing的新手。几周前我刚刚开始玩Swing,而且我在某个时候陷入困境......

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

有可能吗?怎么样?

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

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

但您不希望在表格视图中显示此列,因此您需要将其从视图中删除:

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

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

因此渲染的基本代码如下:

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

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

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

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

答案 1 :(得分:0)

另一种方法是保存行&amp; 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;
            }
        });