在我的JavaFX应用程序中,我在树形视图中使用复选框来更改节点的可见性。
但是,在特殊情况下,应提示用户确认其选择,因为激活特定复选框时可能会出现问题。将打开一个对话框窗口,用户可以在其中选择“是”和“否”。如果用户选择“是”,节点将可见,一切正常。但如果用户选择“否”,则应再次取消选中该复选框。
我的想法是检查ChangeListener
中的条件(在本例中,在对话框窗口中按“否”),如果为真,则将所选值设置为假。
但不管出于什么原因,它不起作用。之后,我发现它与TreeView
的刷新()
方法一起工作。
refresh()
方法它就不能工作,为什么setSelected()
被忽略
使用刷新()
行将显示所需的行为:单击后复选框保持未选中,因为5
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.scene.Scene;
import javafx.scene.control.CheckBoxTreeItem;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import org.controlsfx.control.CheckTreeView;
public class HelloApplication extends Application {
enum Names { TEST1, TEST2, TEST3, TEST4 }
private final CheckTreeView<String> checkTreeView = new CheckTreeView<>();
@Override
public void start(Stage stage) {
VBox vBox = new VBox();
Scene scene = new Scene(vBox, 500, 500);
setTreeView();
vBox.getChildren().add(checkTreeView);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
public void setTreeView() {
CheckBoxTreeItem<String> rootItem = new CheckBoxTreeItem<>("Root");
rootItem.setExpanded(true);
for (Names name : Names.values()) {
CheckBoxTreeItem<String> item = new CheckBoxTreeItem<>(name.toString(), null);
item.selectedProperty().addListener(this.onSelectionChanged(item));
rootItem.getChildren().add(item);
}
this.checkTreeView.setRoot(rootItem);
}
private ChangeListener<Boolean> onSelectionChanged(CheckBoxTreeItem<String> item) {
return (observableValue, previousChoice, newChoice) -> {
if (newChoice) { // if checkbox is selected
// if anything happens... for example press a "no" button in a dialog window
if (5 > 4) {
System.out.println("reset checkbox status");
item.setSelected(previousChoice);
}
}
// it works with refresh:
// this.checkTreeView.refresh();
};
}
}
您正在过早地重置复选框项。它尚未完成事件处理。
您想等到它完成后再重置它。使用平台。请稍后运行,以确保在处理完所有挂起事件后将其重置:
Platform.runLater(() -> item.setSelected(previousChoice));
主要内容:创建复选框,复选框状态,示例复选框允许用户进行多项选择。例如,当订购披萨时,可以添加多个调味料。单选按钮或切换按钮用于单选或无选择。 创建复选框 我们可以使用中的构造函数来创建的对象。 创建不带标题的复选框,如下代码所示 - 要创建带有字符串标题的复选框,如下代码所示 - 创建复选框后,我们可以更改其文本并将其选中。 复选框状态 可以使用来表示三个状态: Yes No Not Applicable(不适用) “不适用”状态是
我的JavaFx FXML应用程序有问题。 当我在表单上选中复选框时,我想根据单击的复选框执行一个方法。是否有任何方法可以将复选框的名称传递给该方法,以便对其执行一些有条件的工作? 我有两个复选框,只能选择一个。当我单击其中一个时,应取消选择另一个,反之亦然。显然,下面的代码将无法工作,因此我希望传递被单击对象的名称。 任何帮助都将不胜感激,非常感谢。
如果选中复选框D并取消选中其他复选框,我希望选中复选框K和F。同样,如果选中复选框I,则前面的复选框I将被选中,下面的复选框将被取消选中。我的html代码是: 我为此所做的是: 这看起来很乱,还有一个很酷的过程吗???
下面是我的代码。 问题是当我选中一个复选框时,包括选中循环视图中的其他复选框。但当我签入适配器时,项目被正确添加,但复选框被复制。 例如:如果我选中了第一项复选框,向下滚动第16项复选框也会被选中。取消选中该复选框也将取消选中第一项。
我已经实现了。
我已经试过了所有可能的方法,但还是没有成功。我有一个带有的模式窗口,我希望当模式打开时,的选中或取消选中应该基于数据库值。(我已经与其他表单字段一起工作了。)我开始试着检查,但没有用。 我的HTML分区: 和jQuery: 我也尝试了和其他在论坛上看到的,但似乎都不起作用。 有人能给我指出正确的方法吗? 好吧,我真的漏了点什么。如果复选框在页面中,我可以使用代码勾选/取消勾选,但如果它在模态窗口中