2014-11-10 3 views
0

각 행에는 RGB 값이있는 세 개의 셀이 있습니다. 이 RGB 값을 사용하여 같은 행에있는 다른 셀의 배경을 설정합니다. 배경색이 필요한 셀에는 RGB 값을 선택하고 배경을 완벽하게 설정하는 콜백이 있습니다. 따라서 전체 TableView은 내가 필요한만큼 정확하게 보입니다. 컬러 피커가 있고이 피커는 세 개의 RGB 값이 포함 된 선택된 행을 업데이트해야합니다. 새로운 3 개의 RGB 값을 설정할 수는 있지만 색상이있는 셀을 사용하여 새로운 RGB 값으로 업데이트해야합니다. 아래의 코드에서이 작업을 수행하는 방법을 찾았지만 오히려 추한 것 같습니다. 값을 변경하지 않고 TableView의 CellValue 업데이트를 트리거하십시오.

@FXML void handleColorPicker(ActionEvent event) 
{ 
    int r = (int) (comColorPicker.getValue().getRed()*255); 
    int g = (int) (comColorPicker.getValue().getGreen()*255); 
    int b = (int) (comColorPicker.getValue().getBlue()*255); 

    ComTableView.getSelectionModel().getSelectedItem().setRCom(r); 
    ComTableView.getSelectionModel().getSelectedItem().setGCom(g); 
    ComTableView.getSelectionModel().getSelectedItem().setBCom(b); 
    // we need to kick the cell value so it updates also the background color so we clear and rewrite the text string 
    String currentName = ComTableView.getSelectionModel().getSelectedItem().getCommodityName(); 
    ComTableView.getSelectionModel().getSelectedItem().setCommodityName(" "); 
    ComTableView.getSelectionModel().getSelectedItem().setCommodityName(currentName); 
} 

위의 코드의 마지막 세 줄

은 세포의 updateItem하지만 난 못생긴 방법으로이 일 것 같아 트리거합니다. 궁금한데, 더 좋은 방법이 있을까요?

답변

0

이 일을 두 가지 방법이 있습니다 :

  1. 를 사용하여 자바 FX property value extractors
  2. 이 부분적으로 데이터 클래스 다시는 경로 2 추락하는 경우

: 가정하자 당신의 테이블의 데이터 클래스는 ColorData이며 세 가지 속성을 가지고 있습니다 :

,210
  • int RCom
  • int GCom
  • int BCom
  • String CommodityName
  • 당신이 StringPropertyString에서 CommodityName을 변경을 통해 TableView이를 제공하는 경우 지금

commodityNameColumn.setCellValueFactory(cellData -> cellData.getValue().commodityNameProperty()); 

여기서 commodityNameColumncommodityNameProperty() 새 메서드를 표시하는 ColorData의 새 StringProperty를 표시하는 TableView의 TableColumn입니다.

이제 Setter를 통해 StringProperty를 변경하면 값이 실제로 변경되므로 TableCell도 그에 따라 업데이트됩니다.


어떻게 this tutorial을 추천 자바 FX의 TableView에 데이터 클래스를 연결하는 분명 뭔가가 여전히 존재합니다.

관련 문제