簡體   English   中英

根據模型值在JTable中隱藏單個單元格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM