2017-03-08 9 views
0

observableList의 데이터베이스에서 오는 값을 대신하여 객체 열을 받기 위해 셀 열을 설정하려고합니다. 다른 컬럼을 미러링하는 컬럼에 값이 채워진다. (왼쪽에서 오른쪽으로 col A와 B가있다.) 기본적으로 같은 정보를 제외하고는 - col B가 원 오브젝트를 나타 내기 위해 바뀌길 바란다. 여기까지 내 코드가있다. 당신이 제안이 있으면 알려 주시기 바랍니다.javafx tablecolumn cell change

status.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList, Circle>, ObservableValue<Circle>>() { 
    @Override 
    public ObservableValue<Circle> call(TableColumn.CellDataFeatures<ObservableList, Circle> param) { 


     String c = (String) param.getValue().get(2); //getting all data in column 2 of the row 
     System.out.println(c); 

     switch(c){ 

      case "High":   
       circle.setFill(Color.GREEN); 
       healthstatus.setStyle("-fx-alignment: CENTER;");    
       break; 

      case "Medium": 
       circle.setFill(Color.YELLOW); 
       healthstatus.setStyle("-fx-alignment: CENTER;");   
       break; 

      case "Low": 
       circle.setFill(Color.RED); 
       healthstatus.setStyle("-fx-alignment: CENTER;");   
       break; 

      default: 
       circle.setFill(Color.BLUEVIOLET); 
      } 
     return new SimpleObjectProperty(circle);       
    }    
}); 

을 내가 가지고있는 코드를 계속하는 것을 선호 값을 설정에 대한 응답으로 클래스를 생성 할 필요없이.

내가 첨부 한 사진을 보여 내 결과는 지금까지

미리 감사드립니다. Image

+0

두 개의 열이 같은 정보를 포함하고 있지만, 그것을 표시하는 방법에 차이가있는 경우, 모두 같은'cellValueFactory'를 사용합니다. 다른'cellFactory'를 사용하여 데이터 표시 방법을 변경하십시오. –

답변

-1

cellValueFactory() 속성 대신 cellFactory() 속성을 사용하는 것이 좋습니다. cellValueFactory()은 셀 내에 항목을 표시하기 때문에 그리고 달리, cellFactory()은 셀의 사용자 정의 모양을 다룹니다.

Callback<TableColumn<Person, String>, TableCell<Person, String>> circle_cell_factory = (final TableColumn<Person, String> param) -> { 
     final TableCell<Person, String> circle_cell = new TableCell<Person, String>() 
     { 
      final Circle circle = new Circle(6); 

      @Override 
      public void updateItem(String item, boolean empty) 
      { 
       super.updateItem(item, empty); 
       if(!empty) { 
        switch(param.getCellData(getIndex())) { 
         case "High":   
          circle.setFill(Color.GREEN); 
          healthstatus.setStyle("-fx-alignment: CENTER;");    
          break; 

         case "Medium": 
          circle.setFill(Color.YELLOW); 
          healthstatus.setStyle("-fx-alignment: CENTER;");   
          break; 

         case "Low": 
          circle.setFill(Color.RED); 
          healthstatus.setStyle("-fx-alignment: CENTER;");   
          break; 

         default: 
          circle.setFill(Color.BLUEVIOLET); 
         } 
        } 
        setGraphic(circle); 
       } 
      } 
     }; 
     return circle_cell; 
    }; 

그런 다음 열에 circle_cell_factory을 추가합니다.

status.setCellFactory(circle_cell_factory); 

출력 :

enter image description here

+0

천재! @ShekkarRaee - 감사합니다. ... 이후 나는 멍청한 짓이야, 나는 여전히 더 aby 개념을 소화해야합니다 – jerry

+0

@ 제리, 행운을 빌어 요! –