Fre*_*erg 1 java swing jtable tablecellrenderer abstracttablemodel
我有一个 JTable,显示来自允许整数值 0、1 和 2 的模型的值。这些值显示在 9 x 9 网格中(就像数独游戏板)。
我的问题是:如何从 GUI 中隐藏零值?
也就是说,在模型值为零的表格单元格中,我不希望 GUI 显示任何值。然而,由于正在进行计算,模型必须包含零值。
我尝试使用 DefaultTableCellRenderer 并使用 setVisible(true) 将单元格组件设置为不可见(如本问题所示),但没有得到任何结果。
我已设法使用 DefaultTableCellRenderer 根据模型状态切换任何单元格的背景颜色(如果单元格被视为“负”)。我确实想让背景颜色保持可见。
我对java有点陌生,所以也许这只是一个更新问题?
这是我的 DefaultTableCellRenderer:
private static class GameTableRenderer extends DefaultTableCellRenderer
{
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
GameModel model = (GameModel) table.getModel();
if(model.isNegative(row, column))
c.setBackground(Color.lightGray);
else
c.setBackground(Color.white);
if(model.getAbsoluteValueAt(row, column) == 0)
c.setVisible(false);
else
c.setVisible(true);
return c;
}
}
Run Code Online (Sandbox Code Playgroud)
“getAbsoluteValueAt”方法返回整数 0、1 或 2。背景颜色的更改效果非常好。
我的模型扩展了 AbstractTableModel,并且 JTable 使用如下渲染器:
table.setDefaultRenderer(int.class, renderer);
Run Code Online (Sandbox Code Playgroud)
我希望这些信息足以解释我的问题以及我迄今为止所付出的努力。请询问更多信息,我会提供。
先感谢您。/弗雷德里克
或者您可以使用以下内容:
if(model.getAbsoluteValueAt(row, column) == 0)
c.setForeground(c.getBackground());
else
c.setForeground(Color.BLACK);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2179 次 |
| 最近记录: |