質問

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

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値として表示しています。

役に立ちましたか?

解決

「発行された」値を考慮に入れて、次のように背景色を設定する必要があります。

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

私はこれを私のListCellrenderersの1人から取ったが、TableCellRenderersでも同じように機能すると思います。

ああ、ところで、テキストフィールドを再利用することができます。各セルに新しいテキストフィールドを作成する必要はないため、テキストフィールドをクラスのメンバーにすることができます。色と返品。そうすれば、大きなテーブルに100万個のテキストフィールドインスタンスが表示されません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top