2010-11-23 9 views
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()); 

問題は、私はこのレンダラーを設定するとき、行が選択不可能になるということです。表示する必要があるものを表示するために別のコンポーネントを使用する必要がありますか?基本的には、No/Yes値として0/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と同じ動作を前提とし。

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

+0

ありがとうございました。それはそれだった。私はチュートリアルからすべてを再定義する必要はありませんでした。 – dierre

関連する問題