Java 设置已单击表格单元格的背景色

Java 设置已单击表格单元格的背景色,java,jtable,cell,background-color,Java,Jtable,Cell,Background Color,我是Java新手,我想更改一个JTable的特定单元格(我单击的单元格)的背景色 我知道我必须使用我已经使用过的MouseListener,还有mousePressed。但在这一点上,我很迷茫 编辑:忘记添加表格已禁用,因此无法选择单元格 有人能帮我吗?谢谢 您必须创建一个自定义的TableCellRenderer,并将其传递给表 像这样 public class ColorRenderer extends DefaultTableCellRenderer { public Compon

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

我知道我必须使用我已经使用过的
MouseListener
,还有
mousePressed
。但在这一点上,我很迷茫

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


有人能帮我吗?谢谢

您必须创建一个自定义的
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);
}

谢谢你的回答。我忘了加上整个表是禁用的,所以不可能“选择”一个单元格,只需单击它。这可能吗?我已经更新了我的答案。我还没有试过第二种方法,告诉我是否有效。