基于其他一些输入在JTable中设置单元格的背景

时间:2013-09-17 18:31:14

标签: java swing jtable tablecellrenderer

全部 - 我尝试在单击后设置特定单元格的背景颜色并且已成功执行操作。我似乎无法做到这一点。这是代码:

JTable table = new JTable(new DefaultTableModel());
String [] colNames = {"col1", "col2", "ClickMe"};
for (String name : colNames)
  table.addColumn(name);

.... some code .....

String [] someArray = {"t", "t2", "t3"};

....
for (int i=0; i<someArray.length;i++) {
  Object [] row = new Object[3];
  row[0] = "bla";
  row[1] = "bla";
  row[2] = "Update";
  ((DefaultTableModel)table.getModel()).addRow(row);
  ((DefaultTableCellRenderer)gameTable.getCellRenderer(i, 2)).setBackground(Color.LIGHT_GRAY);
  ((DefaultTableCellRenderer)gameTable.getCellRenderer(i, 2)).setHorizontalAlignment(JLabel.CENTER);
}

table.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
  int row = gameTable.rowAtPoint(e.getPoint());
  int col = gameTable.columnAtPoint(e.getPoint());
  if (col == 2) {
  Color cellColor = ((DefaultTableCellRenderer)gameTable.getCellRenderer(row,col)).getBackground();
  if (cellColor == Color.LIGHT_GREY) {
    String val1 = (String)table.getModel().getValueAt(row,1);
    String val2 = (String)table.getModel().getValueAt(row,0);
    if (doSomething(val1, val2)) {  //this returns either true or false, its a Database operations
      ((DefaultTableCellRenderer)table.getCellRenderer(row, 2)).setBackground(Color.BLUE);
      }
   }
 }
};

甚至认为我特意在一行上调用setBackground&amp;列,它使列“2”中每一行中的每个单元格都改变背景颜色而不只是一个特定的颜色。

使用customRenderers的所有示例似乎只是根据点击时将其更改为其他内容来更改颜色,我也需要进行一些处理。

这里有什么想法吗?

谢谢 -

1 个答案:

答案 0 :(得分:1)

Try this


table.setDefaultRenderer(Object.class, new TableCellRenderer(){
            private DefaultTableCellRenderer DEFAULT_RENDERER =  new DefaultTableCellRenderer();
            private Component comp;

            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                if(isSelected){

                    c.setBackground(Color.YELLOW);
                }else{
                if (row%2 == 0){
                if (column==2){
                    c.setBackground(Color.WHITE);

                }
                else {
                    c.setBackground(Color.LIGHT_GRAY);
                } }    }

                return c;
            }

        });