gpt4 book ai didi

javafx - 在 Controls FX 的 CheckListView 上处理事件

转载 作者:行者123 更新时间:2023-12-04 19:32:14 25 4
gpt4 key购买 nike

我尝试使用 Controls FXCheck 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));
}
});
}
}
});

我添加的第一个项目被选中,但后面的项目。

我不知道这是否有帮助,但我的列表已排序。

最佳答案

对于第一个案例,在 the List of Items 上使用监听器在CheckListView , 检查是否添加了项目,然后使用 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));
}
}
});

对于第二种情况,使用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));
}
}
});

完整的 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();

}
}

更新:用于选中新添加的项目复选框,而不是选择

使用:

checkListView.getCheckModel().check(c.getAddedSubList().get(0));

代替

checkListView.getSelectionModel().select(c.getAddedSubList().get(0));

如果要勾选同时选中,可以使用both of them .

关于javafx - 在 Controls FX 的 CheckListView 上处理事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30888526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com