2014-03-29 3 views
8

TableCell 항목을 둘러싸는 텍스트 항목이 포함 된 TableView의 크기를 조정할 때 문제가 발생합니다. 크기를 조정하면 숨겨진 값의 크기가 조정되지만 보이는 항목은 텍스트 배치를 다시 계산하지 않습니다. 빨간색 상자에JavaFX TableColumn 텍스트 배치

The issue.

트윗은 크기 조정 동안 숨겨 예상대로 자신의 텍스트 배치 조정했다되었다. 상자 위의 트윗은 크기 조정 단계에서 볼 수 있었지만 이전 래핑을 계속합니다.

다음은 크기 조정 단계를위한 코드입니다.

fxSearchResultsTableTweet.setCellFactory(new Callback<TableColumn<Status, String>, TableCell<Status, String>>() { 
     @Override 
     public TableCell<Status, String> call(TableColumn<Status, String> arg0) { 
      return new TableCell<Status, String>() { 
       private Text text; 

       @Override 
       public void updateItem(String item, boolean empty) { 
        super.updateItem(item, empty); 
        if (!isEmpty()) { 
         text = new Text(item.toString()); 
         text.setWrappingWidth(fxSearchResultsTableTweet.getWidth()); 
         this.setWrapText(true); 

         setGraphic(text); 
        } 
       } 
      }; 
     } 
    }); 
} 

모든 도움을 주시면 감사하겠습니다.

+1

'text.wrappingWidthProperty(). bind (widthProperty());'를 시도하십시오. 'widthProperty'는 셀의 너비입니다. 나는 이것을 빨리 조롱했다. 그리고 폭은 적절하게 행동하지만 높이는 그렇지 않다. –

+0

그것은 흥미 롭습니다. 저도 똑같이 작동합니다. 높이 문제를 해결하는 방법에 대해 알고 있습니까? – Steve

+0

아니요. 실제로 선택과 관련하여 실제로 잘못 행동합니다. 기본 TableCell을 사용하여 텍스트를 셀의 item 속성에 바인딩하면 (코드 게시) 더 좋지만 여전히 완벽하지는 않습니다. –

답변

10

이 가까이 있지만 잘되지 : 당신이 다음에 세포가 제대로 크기입니다 크기를 조정, 테이블에 새 항목을 추가 할 때 2.2에서

textCol.setCellFactory(new Callback<TableColumn<Status, String>, TableCell<String, String>>() { 

     @Override 
     public TableCell<Status, String> call(
       TableColumn<Status, String> param) { 
      TableCell<Status, String> cell = new TableCell<>(); 
      Text text = new Text(); 
      cell.setGraphic(text); 
      cell.setPrefHeight(Control.USE_COMPUTED_SIZE); 
      text.wrappingWidthProperty().bind(cell.widthProperty()); 
      text.textProperty().bind(cell.itemProperty()); 
      return cell ; 
     } 

    }); 

이 잘못된 높이를 표시합니다. 8에서는 거의 완벽합니다. 첫 번째 항목이 추가 된 후 실패하는 것 같습니다 (적어도 실물 크기의 경우).

코멘트에서 언급 한 바와 같이

,

textCol.setCellFactory(tc -> { 
    TableCell<Status, String> cell = new TableCell<>(); 
    Text text = new Text(); 
    cell.setGraphic(text); 
    cell.setPrefHeight(Control.USE_COMPUTED_SIZE); 
    text.wrappingWidthProperty().bind(textCol.widthProperty()); 
    text.textProperty().bind(cell.itemProperty()); 
    return cell ; 
}); 

더 나은 일을 나타납니다.

+10

텍스트 폭을 cell.widthProperty 대신 widthProperty 열에 바인딩하면 매력적으로 작동합니다. "text.wrappingWidthProperty(). bind (cell.widthProperty());"를 바꿉니다. "text.wrappingWidthProperty(). bind (textCol.widthProperty());"가 포함 된 –

+0

래핑을 응답 가능하게하려면 : 'text.wrappingWidthProperty(). bind (textCol.widthProperty());' – Grigorious

관련 문제