2017-03-08 18 views
0

observableList内のデータベースから来る値の代わりにオブジェクトサークルを受け取るようにセル列を設定したいと考えています。値は、他の列を反映するその列に配置されます(col AとB(左から右へ)と言うことができます - 基本的に同じ情報が含まれています - 円Bを変更して円オブジェクトを表すことを望みました。あなたが提案を持っている場合は、お知らせください。javafx tablecolumnセルの変更

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

2列は同じ情報が含まれているが、彼らはそれを表示する方法が異なる場合は、両方に同じ '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 - ありがとう、それは働いた! ...私はノブだから、私はまだより多くのコンセプトを消化する必要があります – jerry

+0

@謝、幸運! –

関連する問題