JTable,不了解如何在鼠标点击时设置单元格颜色

时间:2014-03-30 16:16:02

标签: java swing jtable mouseevent tablecellrenderer

好吧,我必须完全无脑,但我似乎无法实现设置(永久)JTable中所选(单击)单元格的背景颜色所需的代码。我已经阅读了这个网站上的大多数答案,但我仍然没有得到它。

我正在使用preparedRenderer()方法,但我不明白为什么它不起作用?

table.addMouseListener(
    new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent m) {
        row = table.getSelectedRow();
        column = table.getSelectedColumn();
        }
    }
);

table = new JTable(data, columnNames) {
        public Component prepareRenderer(TableCellRenderer rend, int r, int k) {
            Component g = super.prepareRenderer(rend, row, column);
            g.setBackground(Color.BLUE);
            return g;
        }
};

我理解它的方式是prepareRenderer将表中的特定单元格作为Component,然后允许我更改该Component的属性。但即使我写道:

Component g = super.prepareRenderer(rend, 1, 1);
g.setBackground(Color.BLUE);
return g;

它只绘制整个表而不是行= 1,列= 1的单元格??? 我只是没有得到它......

1 个答案:

答案 0 :(得分:0)

  

它只绘制整个表而不是行= 1,列= 1的单元格

为每个重新绘制的单元格调用prepareRenderer()方法。这是在用户选择一行或多个选项卡到新单元格或单击单元格时动态完成的。

  

设置(永久)我的JTable中所选(单击)单元格的背景颜色。

也许您可以创建一组Point对象来表示要绘制不同颜色的单元格。因此,当您单击单元格时,您将为行/列创建一个Point对象,然后将Point添加到该集合中。

然后在prepareRenderer(...)方法中创建一个新Point,表示您要渲染的行/列。如果在Set中找到此Point,则更改背景颜色。