0

JTable で JComboBox のセル レンダラーを作成しています。このクラスのコンストラクターはパラメーターを取らないでください。getTableCellRendererComponent メソッドの基本的なコードは次のとおりです。

 public Component getTableCellRendererComponent(JTable table, Object value,  
              boolean isSelected, boolean hasFocus,int row, int column)  
 {  
     if (value != null) {  

    removeAllItems();  

         value = value_to_string;
         addItem(value); 


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

        // Select the current value
         this.setSelectedItem(value);  

     }  
     return this;  
 } 

問題は、オブジェクトの代わりに、文字列オブジェクトの配列 (String[]) を値として持つことString[] value_to_string = (String[]) valueです。しかし、これにより例外エラーがスローされます。私が言ったように、コンストラクターにはパラメーターがあってはなりません。誰かがこの問題を解決する方法を見つけることができますか? 前もって感謝します!

4

2 に答える 2

1

TableModel を調整する必要があります。

@Override
public Class<?> getColumnClass(final int col) {
  return String[].class;
}

@Override
public Object getValueAt(final int row, final int col) {
  String[] yourStringArray = // some code
  return yourStringArray;
}

このようにすると、レンダラーで前述したように Object を String[] にキャストできます。 String[] value_to_string = (String[]) value;

于 2011-10-16T07:55:56.793 に答える
1

問題は、値として Object ではなく、String オブジェクトの配列 (String[]) を使用することです。

次に、モデルのデータが間違っています。TableModel には単一の値のみを含める必要があります。コンボボックスから選択した値です。String[] は、レンダラーではなく、コンボ ボックス エディターでのみ使用されます。

于 2011-10-15T14:40:21.187 に答える