2011-11-08 4 views
1

JTable에서 선택된 행의 수를 나타내는 숫자 또는 레이블을 가진 텍스트 필드를 갖고 싶습니다. 내가 넷빈즈를 사용하고 있는데 바인딩 특성을 실험 한 ... JTable로의 속성이 selectedElements라고 있습니다 ... 결합하면 트릭을 할해야JTable의 selectedElements의 수를 바인드 할 수 있습니까?

jTable[${selectedElements.length}] 

또는

jTable[${selectedElements.size}] 

것 같아 label/textfield의 text 프롭퍼티 물론, 그것은 작동하지 않습니다. 선택된 요소의 수를 얻기 위해 사용할 수있는 바인딩식이 있습니까?

답변

2

JTable#getSelectedRowCount()을 사용하여 선택한 행 수를 확인할 수 있습니다. 레이블을 여기에 바인딩하려면 목록 선택 수신기를 목록 선택 모델에 추가하고 값이 변경되면 레이블의 텍스트를 새로 고칠 수 있습니다.

나는 이것을 달성하기 위해 넷빈즈를 사용하는 방법을하지 확신 해요,하지만 당신은 표준 스윙 구성 요소와 함께이 작업을 수행 할 수 있습니다.

3

나는 두 번째 옵션이 작동 할 것으로 기대 했었지만 그렇지 않았습니다. 그 이유는 아마도 다음 (에서의 API 문서 ELProperty)

어떤 빈 속성이 ELProperty 속성 변경 알림을 발사 포함, 자바 콩 사양을 따르 를 통해 해결하는 것이 매우 중요하다; 그렇지 않으면, ELProperty는 변화

목록의 크기() 메소드는 두 가지 조건 중 어느 것도에 준수에 응답 할 수 없습니다.

한 방법 아웃 (동일한 문서에서 언급 한 바와 같이 수동 코딩,하는 BeanAdapterProvider/- 공장을 구현하고 배선을 할 수

AutoBinding sizeBinding = 
     Bindings.createAutoBinding(UpdateStrategy.READ, 
      table, ELProperty.create("${selectedElements}"), 
      countLabel, BeanProperty.create("text") 
      ); 
    Converter<List<?>, String> converter = new Converter<List<?>, String>() { 

     @Override 
     public String convertForward(List<?>value) { 
      if (value != null) { 
       return "" + value.size(); 
      } 
      return "empty"; 
     } 

     @Override 
     public List<?> convertReverse(String value) { 
      return null; 
     } 

    }; 
    sizeBinding.setConverter(converter); 

또 다른 :-) 넷빈즈를 사용하지 않을 것이다 결코 컨버터를 연결하는 것입니다 , 시도하지 않았다.

관련 문제