下午好, 我的用于渲染JTable的渲染类存在问题。我想要的是将第1到4行的背景色设置为蓝色,从5到6行设置为橙色,从18到20行设置为红色。但是,它不允许我这样做。我没有收到任何类型的错误,但是此代码仅允许我设置这三个条件之一。如果我放置此代码,则表中唯一弹出的是最后三行红色,而我希望同时显示三行。
class TeamBold extends DefaultTableCellRenderer {
private String nombre;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
JLabel parent = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (value.equals(nombre)) {
parent.setFont(parent.getFont().deriveFont(Font.BOLD)); //Here I just set a certain cell to bold
}
for (int i = 0; i<table.getRowCount();i++) {
}
if (row >= 0 && row <4) {
parent.setBackground(Color.BLUE);
parent.setForeground(Color.WHITE);
}
if (row >= 4 && row <6) {
parent.setBackground(Color.orange);
parent.setForeground(Color.WHITE);
}
if (row >= 17 && row <19) {
parent.setBackground(Color.RED);
parent.setForeground(Color.WHITE);
}
else {
parent.setBackground(Color.white);
}
return parent;
}
答案 0 :(得分:0)
else
仅覆盖最后一个if
。
此外,不确定是否要在else
块中设置前景或背景。
我假设您想要else
,例如:
if (row >= 0 && row <4) {
parent.setBackground(Color.BLUE);
parent.setForeground(Color.WHITE);
} else if (row >= 4 && row <6) {
parent.setBackground(Color.orange);
parent.setForeground(Color.WHITE);
} else if (row >= 17 && row <19) {
parent.setBackground(Color.RED);
parent.setForeground(Color.WHITE);
} else {
// setForeground?? - currently whatever was set last time through.
parent.setBackground(Color.white);
}
此外,字体通常保留上次设置的字体。
可能写得更好:
导入静态java.awt.Color。*;
Component component = super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column
);
// Here we just set a certain cell to bold
component.setFont(parent.getFont().deriveFont(
value.equals(nombre) ? Font.BOLD: Font.PLAIN
));
final Color fg;
final Color bg;
if (0 <= row && row < 4) {
fg = WHITE; bg = BLUE;
} else if (row <= 4 && row < 6) {
fg = WHITE; bg = ORANGE;
} else if (17 <= row && row < 19) {
fg = WHITE; bg = RED;
} else {
fg = BLACK; bg = WHITE;
}
component.setForeground(fg);
component.setBackground(bg);
(请注意,this
和component
一样好,但是您需要进行设置。)
答案 1 :(得分:0)
还有“ else”块。这是代码。
JLabel parent = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (value.equals(nombre)) {
parent.setFont(parent.getFont().deriveFont(Font.BOLD));
}
if (row >= 0 && row < 4) {
parent.setBackground(Color.BLUE);
parent.setForeground(Color.WHITE);
} else if (row >= 4 && row < 6) {
parent.setBackground(Color.orange);
parent.setForeground(Color.BLACK);
} else if (row >= 17 && row < 20) {
parent.setBackground(Color.RED);
parent.setForeground(Color.WHITE);
} else {
parent.setForeground(Color.black);
parent.setBackground(Color.white);
}
return parent;
答案 2 :(得分:0)
另一种选择是覆盖prepareRenderer(...)
的{{1}}方法。即使您的表在模型中具有String,Integer,对象,该方法也将起作用。请查看Table Row Rendering,以了解更多信息。
此建议的基本实现如下:
JTable
您需要使用JTable table = new JTable(25, 5)
{
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
if (isRowSelected(row)) return c;
// Customize row colors
c.setBackground( getBackground() );
c.setForeground( getForeground() );
if (row < 4)
{
c.setBackground(Color.BLUE);
c.setForeground(Color.WHITE);
}
else if (row < 6)
{
c.setBackground(Color.orange);
c.setForeground(Color.BLACK);
}
else if (row >= 17 && row < 20)
{
c.setBackground(Color.RED);
c.setForeground(Color.WHITE);
}
return c;
}
};
方法来获取该值,以确定是否要使单元格变为粗体。