2016-12-19 5 views
4

私は自分のアプリケーションでcontrolsfx CheckListViewを持っています。私は私のカスタムオブジェクト(例:従業員)を表示しています。私は従業員オブジェクトのリストを作成し、すでに観測可能リストにラップしています。今私はCheckListViewに観測可能なリストを設定します。javafx特定のプロパティを表示するカスタムオブジェクトを持つCheckListView

checkListView.setItems(employeesObservableList); 

すべてここまでうまくいきます。

私は従業員オブジェクトをバインドしているので、リストビューで各チェックボックスの値はEmployeeオブジェクトのtoString()です。私は代わりにtoString()の値を必要としません、私は従業員(eno)の他のいくつかのプロパティを表示したいです。

ここではcellValueFactoryは表示されません。CheckListViewには独自のcellFactoryが既に設定されているため、cellFactoryを使用してタスクを達成する方法がわかりません。

私の質問は、私が選択したチェックボックスの値を持つCheckListViewが欲しいということです。

ありがとうございます!

答えて

4

CheckListViewで使用されるリストセルは、標準CheckBoxListCellからjavafx.scene.control.cellまでです。だからあなたのようなものでcellFactoryを上書きすることができます。

checkListView.setCellFactory(listView -> new CheckBoxListCell(checkListView::getItemBooleanProperty) { 
    @Override 
    public void updateItem(Employee employee, boolean empty) { 
     super.updateItem(employee, empty); 
     setText(employee == null ? "" : employee.getEno()); 
    } 
}); 

CheckBoxListCell<T>が項目を表示する]チェックボックスのブールプロパティを指定Callback<T, BooleanProperty>を取るコンストラクタを持っていること。 CheckListViewは、この値を正確に返すメソッドgetItemBooleanProperty(T item)を定義しているため、メソッド参照を使用してコンストラクタに直接渡すことができます。

import org.controlsfx.control.CheckListView; 

import javafx.application.Application; 
import javafx.beans.property.IntegerProperty; 
import javafx.beans.property.SimpleIntegerProperty; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 
import javafx.collections.FXCollections; 
import javafx.collections.ListChangeListener; 
import javafx.collections.ObservableList; 
import javafx.scene.Scene; 
import javafx.scene.control.cell.CheckBoxListCell; 
import javafx.stage.Stage; 

public class CheckListViewTest extends Application { 


    @Override 
    public void start(Stage primaryStage) { 
     primaryStage.setTitle("Test"); 

     CheckListView<Employee> checkListView = new CheckListView<Employee>(); 

     ObservableList<Employee> oblist = FXCollections.observableArrayList(); 
     for (int i = 1; i <= 40; i++) { 
      oblist.add(new Employee("Employee " + i, i)); 
     } 
     checkListView.setItems(oblist); 

     checkListView.setCellFactory(lv -> new CheckBoxListCell<Employee>(checkListView::getItemBooleanProperty) { 
      @Override 
      public void updateItem(Employee employee, boolean empty) { 
       super.updateItem(employee, empty); 
       setText(employee == null ? "" : String.format("Employee number: %04d", employee.getEno())); 
      } 
     }); 

     checkListView.getCheckModel().getCheckedIndices().addListener(new ListChangeListener<Integer>() { 
      @Override 
      public void onChanged(javafx.collections.ListChangeListener.Change<? extends Integer> c) { 
       while (c.next()) { 
        if (c.wasAdded()) { 
         for (int i : c.getAddedSubList()) { 
          System.out.println(checkListView.getItems().get(i).getName() + " selected"); 
         } 
        } 
        if (c.wasRemoved()) { 
         for (int i : c.getRemoved()) { 
          System.out.println(checkListView.getItems().get(i).getName() + " deselected"); 
         } 
        } 
       } 
      } 
     }); 


     Scene scene = new Scene(checkListView); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static class Employee { 
     private final StringProperty name = new SimpleStringProperty(); 
     private final IntegerProperty eno = new SimpleIntegerProperty(); 
     public Employee(String name, int eno) { 
      setName(name) ; 
      setEno(eno); 
     } 
     public final StringProperty nameProperty() { 
      return this.name; 
     } 

     public final String getName() { 
      return this.nameProperty().get(); 
     } 

     public final void setName(final String name) { 
      this.nameProperty().set(name); 
     } 

     public final IntegerProperty enoProperty() { 
      return this.eno; 
     } 

     public final int getEno() { 
      return this.enoProperty().get(); 
     } 

     public final void setEno(final int eno) { 
      this.enoProperty().set(eno); 
     } 


    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

enter image description here

+0

恐ろしいことになる:

はここSSCCEです!どうもありがとう。 –

関連する問題