1

整数値 0、1、および 2 を許可するモデルからの値を示す JTable があります。値は、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);

この情報が私の問題とこれまでの努力を説明するのに十分であることを願っています。詳細についてはお問い合わせください。提供いたします。

前もって感謝します。/フレドリック

4

2 に答える 2

4

または、次を使用できます。

 if(model.getAbsoluteValueAt(row, column) == 0)
        c.setForeground(c.getBackground());
    else
        c.setForeground(Color.BLACK);
于 2013-03-03T15:39:36.207 に答える
3

コンポーネントを非表示にする代わりに、そのテキストを空の文字列に設定します。

if (model.getAbsoluteValueAt(row, column) == 0) {
    ((JLabel) c).setText("");
}
于 2013-03-03T15:37:23.020 に答える