2012-05-01 7 views
0

私はJtableをバインドするためのJava Beanバインディングを使用しています。下に示すように、apiは整数値または浮動小数点値のデフォルト値を0または0.0に与えます。対応するデフォルト値を避けたい最後のセルの値を除いて空のセル。JTableバインディングデフォルト値を避ける

1  WW  88.0  88.0  1021021  340.0  
4  TT  55.0  55.0  1021021  340.0  
5  PP  66.0  66.0  1021021  340.0 

       0   0   0   1020 

2  gg  66.0  66.0  1021022  320.0  
3  LL  658.0  652.0  1021022  320.0 

       0   0   0    640 

とテーブルが..

1  WW  88.0  88.0  1021021  340.0  
4  TT  55.0  55.0  1021021  340.0  
5  PP  66.0  66.0  1021021  340.0 

                1020 

2  gg  66.0  66.0  1021022  320.0  
3  LL  658.0  652.0  1021022  320.0 

                640 

のようにこの問題を解決するためのより良い方法を提案することができますいずれかに見える、それは事前に完全かつ感謝素晴らしいものになるはずです。

答えて

0

私はJtable Beanをバインディングし、beansbinding-1.2.1.jar apiを自動バインディングに使用していました。私はbeansbinding-1.2.1.jarソースをダウンロードして、クラスに

/org.jdesktop.swingbinding.JTableBinding.java

containing the class BindingTableModel.java which implements the TableModel and I overridden the method as per the suggestions of above two friends and thanks to all... 

@Override

public Object getValueAt(int row, int column) { 
      Object value = valueAt(row, column); 

      if (value != null 
        && (value.toString().equals("0") || value.toString() 
          .equals("0.0")|| value.toString().equals("default"))) { 
       return null; 
      } 

      return value; 
     } 
+0

私はそれがあなたが行きたいとは思わない...私はあなたがそれを使用しているBindingTableModelを拡張することをお勧めします - そうでなければあなたがBindingTableModelを使用したいかもしれない他のケースもこの動作を得ると主張しています。一般的に言えば、第三者のjarファイルのソースを変更して変更することは、通常は悪い考えです。 (また、答えを受け入れるのも良い習慣です...) – amaidment

+0

これを行う方法を示すために私の答えを修正しました。 – amaidment

+0

Hei、private final class BindingTableModel extends ListBindingManagerはTableModelを実装しています。 JTableBinding内のBidingTableModelの構造体です。次に、BindingTableModelクラスをどのように拡張できるかを示します。 –

1

これはTableModelで、特にgetValueAt(int row, int column)の方法を使用して行うべきであることを示唆しています。以下のようなもの:私は最初の列を想定し

public Object getValueAt(int rowIndex, int columnIndex){ 
    Object cellValue = // get your values out of your Beans... 
    if (cellValue==0 && columnIndex!=LAST_COLUMN_INDEX){ 
    return null; 
    } 
    return cellValue; 
} 
+0

問題のみを、関連する変更を行いますこの解決策では、デフォルト値が必要な場所であっても、ヌルによって上書きされるため、APIのデフォルト値は存在しなくなります。 –

1

は、この問題文の

あなたはTableModelgetValueAt(int row, int column)メソッドをオーバーライドすることができため、空白です。

@Override 
public Object getValueAt(int row, int column){ 
    Object value = super.getValueAt(row, column);//Or get it from the Vector defined 
    if(column == 2) {//Demo for the third column do same for other columns 
    //Check the value in the first column if it is coming null 
    if (null == getValueAt(row, 0) || getValueAt(row, 0) == ""){ 
     return null; // null means blank cell 
    } 
    } 
    return value; 
} 
関連する問題