2013-07-24 2 views
0

여기가 내 문제입니다. 일반 텍스트 열과 드롭 다운이있는 열과 체크 박스가있는 표가 있습니다. 이 전지 공장기본 데이터가 없어도 테이블의 추가 요소가 항상 표시됩니다.

 Callback<TableColumn<Person, String>, TableCell<Person, String>> dropdownConditionCellFactory = 
        new Callback<TableColumn<Person, String>, TableCell<Person, String>>() { 
       @Override 
       public TableCell call(TableColumn p) { 
       Tools.Tables.ComboBoxCell<partCondition> cell = new Tools.Tables.ComboBoxCell<partCondition>(partConditionList) 

        return cell; 
       } 
      }; 

그리고 클래스 : 이것은 내 드롭 다운 열의 전지 공장 콜백입니다

공공 정적 클래스 ComboBoxCell가 테이블 셀을 확장 {

private ComboBox combo; 

    public ComboBoxCell() { 
     combo = new ComboBox(); 
     setGraphic(combo); 
     setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 

    } 

    public ComboBoxCell(ObservableList items) { 
     combo = new ComboBox(); 
     combo.setItems(items); 
     setGraphic(combo); 
     setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
     combo.getSelectionModel().selectFirst(); 
    } 

    public T getSelectedItem() 
    { 
     return (T) combo.getSelectionModel().getSelectedItem(); 
    } 

    public void setSelectedItem(T t) 
    { 
     combo.getSelectionModel().select(t); 
    } 
} 

내 문제는 표가 될 때입니다 매우 크고 그 안에 2 행만있는 경우 드롭 다운은 어쨌든 생성되며 다음과 같이 보입니다.

enter image description here

많은 수의 드롭 다운 및 체크 박스가이 테이블을 제공하는 관찰 가능 목록에있는 항목만큼만 생성 할 수 있습니까?

답변

1

세포로 작업하는 동안 사전에 Cell API을 읽고 후드에서 어떻게 처리되는지 이해하십시오. 즉, 셀은 다른 항목/레코드를 렌더링하기 위해 다른 행에서 재사용됩니다. 셀을 다시 사용할 때마다 updateItem() 메서드가 호출되어 셀이 렌더링하는 항목을 새로 고칩니다. 따라서 생성자 대신에이 메서드를 재정의하고 을 제어해야합니다.

private ComboBox combo; 

    public ComboBoxCell() { 
     combo = new ComboBox(); 
    } 

    public ComboBoxCell(ObservableList items) { 
     combo = new ComboBox(); 
     combo.setItems(items); 
    } 

    @Override 
    public void updateItem(String item, boolean empty) { 
     super.updateItem(item, empty); 

     if (empty) { 
      setText(null); 
      setGraphic(null); 
     } else { 
      combo.getSelectionModel().select(item); 
      setGraphic(combo); 
      setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
     } 
    } 
+0

이 메서드는 목록이 매우 긴 경우가 아니라면 완벽하게 작동합니다. 그런 다음 요소가 무작위로 사라지기 시작합니다 (유명한 Javafx tableview 문제, http://stackoverflow.com/questions/13469661/textfield-inside-tableview-gone-after-scroll-javafx/18019529#18019529) 있을 수 있습니다. 이 문제를 해결하는 또 다른 방법은 CSS를 사용하는 것입니다. – Damian

관련 문제