セルレンダラーを使用した後、行の選択関数が無効になります
-
27-09-2019 - |
質問
私は何か間違ったことをしているクリアです。私の推測はコンポーネントですが、ここに問題があります。これは私のセルレンダラーです:
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万個のテキストフィールドインスタンスが表示されません。
所属していません StackOverflow