2

私は明らかに何か間違ったことをしている。私の推測はコンポーネントですが、ここに問題があります。これは私のセルレンダラーです:

public class WildcardCellRenderer implements TableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {

        JTextField c = new JTextField();
        c.setBorder(javax.swing.BorderFactory.createEmptyBorder());

        if(vColIndex == 2){
            if((Integer)value == 0) c.setText("No") ;
            else c.setText("Si");
        } else c.setText(value.toString());

        return c;
    }

}

これが私のパネルでの設定方法です。

    this.table.setDefaultRenderer(Object.class, new WildcardCellRenderer() );

問題は、このレンダラーを設定すると、行が選択できなくなることです。表示する必要があるものを表示するには、別のコンポーネントを使用する必要がありますか?基本的に、0/1の値をNo/Yesの値として表示しています。

4

1 に答える 1

4

「isSelected」値を考慮に入れ、それに応じて背景色を次のように設定する必要があります。

 if (isSelected) {
        c.setBackground(table.getSelectionBackground());
        c.setForeground(table.getSelectionForeground());
    }
    else {
        c.setBackground(table.getBackground());
        c.setForeground(table.getForeground());
    }

これをListCellRenderersの1つから取得しましたが、TableCellRenderersでも同じように機能すると思います。

ああ、ところで、テキストフィールドを再利用できます。セルごとに新しいテキストフィールドを作成する必要はないので、テキストフィールドをクラスのメンバーにして、メソッド内でcontent/などのテキストフィールドの何かを変更するだけです。色を付けて返します。そうすれば、大きなテーブルに100万のテキストフィールドインスタンスが表示されることはありません。

于 2010-11-23T09:32:05.147 に答える