2016-01-21 75 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

謝謝! :) 有效。 –