我尝试使用Controls FX和Check List View组件,但是我有几个关于如何使用它的问题:
CheckListView,如何在默认情况下选择它?我想我必须使用setCheckModel,但我迷路了.checkBox某个事件时如何处理事件?我不知道该怎么做,因为我处理的事件是在节点上而不是在节点上checkBox.我不明白如何使用eventHandler这个组件.编辑:这是我做的:
departureCheckListView.setItems(myListAirport.getObservableDepartureAirtport());
departureCheckListView.getItems().addListener(new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
c.next();
if (c.wasAdded()) {
System.out.println(c.getAddedSubList().get(0));
//departureCheckListView.getSelectionModel().select(c.getAddedSubList().get(0));
Platform.runLater(new Runnable() {
@Override
public void run() {
departureCheckListView.getCheckModel().check(c.getAddedSubList().get(0));
}
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
检查我添加的第一个项目,但是后面的项目.
我不知道这是否有帮助,但我的清单已经整理好了.
对于你的第一个情况下,使用监听器the List of Items的CheckListView方式,检查的项目被添加到它或NOR,然后,使用getSelectionModel().select(<Item>)选择它.
checkListView.getItems().addListener(new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
c.next();
if (c.wasAdded()) {
checkListView.getSelectionModel().select(c.getAddedSubList().get(0));
}
}
});
Run Code Online (Sandbox Code Playgroud)
对于第二种情况,用于getCheckModel().getCheckedItems()获取具有的项目列表checked values.同样,检查项目是否added / removed来自列表.
checkListView.getCheckModel().getCheckedItems().addListener(new ListChangeListener<String>() {
@Override
public void onChanged(ListChangeListener.Change<? extends String> c) {
c.next();
if(c.wasAdded()) {
System.out.println("Item Checked : " + c.getAddedSubList().get(0));
} else if (c.wasRemoved()) {
System.out.println("Item Unchecked : " + c.getRemoved().get(0));
}
}
});
Run Code Online (Sandbox Code Playgroud)
完成MCVE - 使用ControlsFX测试 - 8.40.9
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import org.controlsfx.control.CheckListView;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
final ObservableList<String> listOfItems = FXCollections.observableArrayList();
for (int i = 0; i <= 100; i++) {
listOfItems.add("Item " + i);
}
final CheckListView<String> checkListView = new CheckListView<>(listOfItems);
// Select the first checkListView element
checkListView.getItems().addListener(new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
c.next();
if (c.wasAdded()) {
checkListView.getSelectionModel().select(c.getAddedSubList().get(0));
}
}
});
// On CheckBox event
checkListView.getCheckModel().getCheckedItems().addListener(new ListChangeListener<String>() {
@Override
public void onChanged(ListChangeListener.Change<? extends String> c) {
c.next();
if(c.wasAdded()) {
System.out.println("Item Checked : " + c.getAddedSubList().get(0));
} else if (c.wasRemoved()) {
System.out.println("Item Unchecked : " + c.getRemoved().get(0));
}
}
});
Button button = new Button("Add");
button.setOnAction(e -> {
checkListView.getItems().add(0, "Itachi");
checkListView.requestFocus();
});
Scene scene = new Scene(new VBox(checkListView, button), 300, 275);
primaryStage.setTitle("Welcome");
primaryStage.setScene(scene);
primaryStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
更新:用于检查新添加的项目复选框,而不是选择
使用 :
checkListView.getCheckModel().check(c.getAddedSubList().get(0));
Run Code Online (Sandbox Code Playgroud)
代替
checkListView.getSelectionModel().select(c.getAddedSubList().get(0));
Run Code Online (Sandbox Code Playgroud)
如果您想要检查它并同时选择,您可以使用both of them.
| 归档时间: |
|
| 查看次数: |
2305 次 |
| 最近记录: |