设置单击的表格单元格的背景颜色

时间:2015-03-29 18:20:08

标签: java jtable cell background-color

我是Java的新手,我想更改JTable的特定单元格(我点击的单元格)的背景颜色。

我知道我必须使用我已经做过的MouseListenermousePressed。但在这一点上我很失落。

编辑:忘记添加该表已被禁用,因此您无法选择单元格。

任何人都可以帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您必须创建自定义TableCellRenderer并将其传递给表格

像这样

public class ColorRenderer extends DefaultTableCellRenderer {
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col)  {
       // get the DefaultCellRenderer to give you the basic component
       Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
       // apply your rules
       if(table.isRowSelected(row) && table.isColumnSelected(col))
          c.setBackground(Color.GREEN);
       else{    
           c.setBackground(table.getBackground());
       }

       return c;
    }
}

在这个类中,我们检查给定单元格是否是所选单元格(这是我们点击它时几乎发生的事情)并以不同方式绘制它(在我的情况下我将其绘制为绿色),否则我们使用默认颜色或你喜欢的任何颜色。

不要忘记设置刚刚创建的自定义渲染器

table.setDefaultRenderer(Object.class, new ColorRenderer());


编辑1

您必须获取所点击单元格的行和列。

创建2个将保持位置的int变量

private int clickedRow=-1,clickedCol=-1;

添加一个更新位置变量的鼠标监听器

table.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent event) {
                clickedRow= table.rowAtPoint(event.getPoint());
                clickedCol= table.columnAtPoint(event.getPoint());
            }
});
之后

更改渲染器,使其仅绘制具有特殊颜色的单击单元格

if( clickedRow == row && clickedCol == col){
    c.setBackground(Color.GREEN);
}