如何保持 JTable 自定义呈现器在 window 调整大小时的外观?
How to keep JTable custom renderer looks on window resize?
我的 Java 应用程序中有一个 JTable,并应用了一个自定义渲染器来更改 table 最后一行的背景颜色。像这样:
我使用以下自定义渲染器代码实现了这一点:
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row, int col) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, col);
String status = (String)table.getModel().getValueAt(row, 0);
if ("Total".equals(status)) {
setBackground(Color.GRAY);
setForeground(Color.WHITE);
}
this.setHorizontalAlignment(CENTER);
return this;
}
});
但是,当我调整 window 的大小时,它看起来像这样:
要恢复正常,我必须清除 table 并重新添加项目,我应该怎么做才能在调整大小时保持 table 外观?谢谢。
您忘记了 else
块来设置颜色:
if ("Total".equals(status)) {
setBackground(Color.GRAY);
setForeground(Color.WHITE);
} else {
// set colors back to the default settings
setBackground(null);
setForeground(null);
}
否则渲染器保持 "set" 并且将为所有单元格着色 gray/white。将渲染器想象成一个橡皮图章,用来印出很多相同的东西。如果您更改了它的颜色并且没有将它们改回原来的颜色,则图章在颜色模式下为 "stuck"。
实际上,您不应该为 "Quantity" 和 "Price" 列存储字符串数据。相反,您应该存储 Integer 和 Double 值。所以这意味着您需要创建 3 个自定义渲染器。
另一种选择是覆盖 JTable 的 prepareRenderer(...)
方法来设置背景颜色。
查看 Table Row Rendering 了解更多信息和此方法的示例。
我的 Java 应用程序中有一个 JTable,并应用了一个自定义渲染器来更改 table 最后一行的背景颜色。像这样:
我使用以下自定义渲染器代码实现了这一点:
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row, int col) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, col);
String status = (String)table.getModel().getValueAt(row, 0);
if ("Total".equals(status)) {
setBackground(Color.GRAY);
setForeground(Color.WHITE);
}
this.setHorizontalAlignment(CENTER);
return this;
}
});
但是,当我调整 window 的大小时,它看起来像这样:
要恢复正常,我必须清除 table 并重新添加项目,我应该怎么做才能在调整大小时保持 table 外观?谢谢。
您忘记了 else
块来设置颜色:
if ("Total".equals(status)) {
setBackground(Color.GRAY);
setForeground(Color.WHITE);
} else {
// set colors back to the default settings
setBackground(null);
setForeground(null);
}
否则渲染器保持 "set" 并且将为所有单元格着色 gray/white。将渲染器想象成一个橡皮图章,用来印出很多相同的东西。如果您更改了它的颜色并且没有将它们改回原来的颜色,则图章在颜色模式下为 "stuck"。
实际上,您不应该为 "Quantity" 和 "Price" 列存储字符串数据。相反,您应该存储 Integer 和 Double 值。所以这意味着您需要创建 3 个自定义渲染器。
另一种选择是覆盖 JTable 的 prepareRenderer(...)
方法来设置背景颜色。
查看 Table Row Rendering 了解更多信息和此方法的示例。