2013-03-03 377 views
1

我有一個JTable顯示來自允許整數值0,1和2的模型的值。這些值顯示在9乘9的網格中(如數獨遊戲板)。根據模型值隱藏JTable中的單個單元

我的問題是:如何從GUI中隱藏零值?

也就是說,在模型值爲零的表單元格中,我不希望GUI顯示任何值。由於計算已完成,模型必須包含零值。

我試圖使用DefaultTableCellRenderer並通過使用setVisible(true)(如this question)將單元格組件設置爲不可見,但我沒有得到任何結果。

我設法使用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); 

我希望這個信息就足以說明我的問題,我至今都擺在努力請索取更多信息我會提供它。

預先感謝您。 /弗雷德裏克

回答

3

不是使組件無形,其文本設置爲空字符串:

if (model.getAbsoluteValueAt(row, column) == 0) { 
    ((JLabel) c).setText(""); 
} 
+0

謝謝,完美!我會用這個解決方案! – 2013-03-03 15:50:33

+0

+1幾乎得到了揮杆金徽章:) – 2013-03-03 15:54:15

+0

您也可以返回一個新的空組件,例如JTextField – mdscruggs 2013-03-03 15:55:10

4

或者,您可以使用以下方法:

if(model.getAbsoluteValueAt(row, column) == 0) 
     c.setForeground(c.getBackground()); 
    else 
     c.setForeground(Color.BLACK); 
+0

謝謝,這個方法和我們接受的解決方案一樣好!我結束了JB Nizet的回答,因爲它更短:-) – 2013-03-03 15:51:33

相關問題