JTable 中的 cell setBorder 更改附近的单元格背景
cell setBorder in JTable changes nearby cells background
我创建了一个包含 4 列的 JTable
,其中填充了来自 txt 文件的数据。因此,没有对每个单元格中插入的数据类型进行验证。第 2 和第 3 列必须填充 "int"。
我想为这两列中不包含 "int" 值的每个单元格设置红色字体。
问题:附近小区的背景也被修改了。我该如何解决这个问题?
/**
* 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);
渲染器的第一条语句应该是:
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
这将在您应用自定义之前重置渲染器默认属性。
此外,不需要 setValue(...)
声明,因为这将为您完成。
我创建了一个包含 4 列的 JTable
,其中填充了来自 txt 文件的数据。因此,没有对每个单元格中插入的数据类型进行验证。第 2 和第 3 列必须填充 "int"。
我想为这两列中不包含 "int" 值的每个单元格设置红色字体。
问题:附近小区的背景也被修改了。我该如何解决这个问题?
/**
* 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);
渲染器的第一条语句应该是:
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
这将在您应用自定义之前重置渲染器默认属性。
此外,不需要 setValue(...)
声明,因为这将为您完成。