2016-01-21 76 views
0

我创建了一个JTable,其中包含4个填充了来自txt文件的数据的列。因此,每个单元格中插入的数据类型都没有验证。第二列和第三列必须填入“int”。 我想为这两列中不包含“int”值的每个单元格设置红色字体。JTable中的单元格setBorder更改了附近的单元格背景

问题:附近单元格的背景也被修改。我该如何解决这个问题?

/** 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates and open the template 
* in the editor. 
*/ 
package rdjcsv; 

import java.awt.Color; 
import javax.swing.BorderFactory; 
import static javax.swing.BorderFactory.createEmptyBorder; 

public class MyCellRendererKO extends javax.swing.table.DefaultTableCellRenderer { 

    public MyCellRendererKO() { 
     setOpaque(true); //MUST do this for background to show up. 
    } 

    public java.awt.Component getTableCellRendererComponent(
     javax.swing.JTabletable, java.lang.Object value, boolean isSelected, 
     boolean hasFocus, int row, int column) { 
     if (isNumeric(table.getValueAt(row, column).toString())) { 
      //setBorder(createEmptyBorder()); 
      setForeground(Color.black); 
      setValue(value); 
     } else { 
      setForeground(Color.red); 
      //setBorder(BorderFactory.createLineBorder(Color.RED,1)); 
      setValue(value); 
     } 
     return this; 
    } 
} 
… 
MyCellRendererKO mcr = new MyCellRendererKO(); 
jTable1.getColumnModel().getColumn(i).setCellRenderer(mcr); 

image

回答

3

渲染器的第一个语句应该是:

super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

你申请你自定义之前这将重置渲染默认属性。

此外,没有必要使用setValue(...)声明,因为这将为您完成。

+0

谢谢! :) 有效。 –