2012-05-01 4 views
0

자바 빈 바인딩을 사용하여 Jtable을 바인딩하고 있고 아래에 표시된 것처럼 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 빈을 바인딩하고 자동 바인딩을 위해 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을 사용하고자하는 다른 경우에도이 동작을 얻을 것이라고 주장한다. 일반적으로 말하자면, 타사 항아리의 출처를 바꾸고 변경하는 것은 대개 잘못된 생각입니다. (또한 다시 대답을 받아들이는 것이 좋습니다.) – amaidment

+0

이 작업을 수행하는 방법을 보여주기 위해 내 대답이 수정되었습니다. – amaidment

+0

Hei, 개인 최종 클래스 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

유일한 문제를 관련 변경 이 솔루션을 사용하면 기본값이 필요한 곳에서도 null로 대체되므로 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; 
}