[英]Hiding an individual cell in JTable depending on model value
我有一個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;
}
}
“ getAbsoluteValueAt”方法返回整數0、1或2。更改背景顏色效果非常好。
我的模型擴展了AbstractTableModel,而JTable使用如下渲染器:
table.setDefaultRenderer(int.class, renderer);
我希望這些信息足以解釋我的問題以及到目前為止我已付出的努力。請索取更多信息,我將提供。
先感謝您。 /弗雷德里克
或者,您可以使用以下命令:
if(model.getAbsoluteValueAt(row, column) == 0)
c.setForeground(c.getBackground());
else
c.setForeground(Color.BLACK);
與其使組件不可見,不如將其文本設置為空字符串:
if (model.getAbsoluteValueAt(row, column) == 0) {
((JLabel) c).setText("");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.