当前位置: 首页 > 知识库问答 >
问题:

选择复选框时触发JAVAFX事件

程谭三
2023-03-14

我的JavaFx FXML应用程序有问题。

当我在表单上选中复选框时,我想根据单击的复选框执行一个方法。是否有任何方法可以将复选框的名称传递给该方法,以便对其执行一些有条件的工作?

我有两个复选框,只能选择一个。当我单击其中一个时,应取消选择另一个,反之亦然。显然,下面的代码将无法工作,因此我希望传递被单击对象的名称。

任何帮助都将不胜感激,非常感谢。

@FXML private void updateRcs(){

    if (chkRcsuri.isSelected()){
        chkRcsuri2.setSelected(false);
    }

    if (chkRcsuri2.isSelected()){
        chkRcsuri.setSelected(false);
    }

}

共有3个答案

东门理
2023-03-14

所以我试图做类似的事情,除了我有多个复选框,然后一个复选框与其他复选框一起使用是荒谬的。我创建了两个独立的侦听器,并将一个通用的设置为主框,一个专用的设置为例外。

@FXML private CheckBox redCB = new CheckBox();
@FXML private CheckBox blueCB = new CheckBox();
@FXML private CheckBox greenCB = new CheckBox();
@FXML private CheckBox whiteCB = new CheckBox();
@FXML private CheckBox blackCB = new CheckBox();
@FXML private CheckBox colorlessCB = new CheckBox();

//assigning listeners
redCB.selectedProperty().addListener(colorCheckChange);
blueCB.selectedProperty().addListener(colorCheckChange);
greenCB.selectedProperty().addListener(colorCheckChange);
whiteCB.selectedProperty().addListener(colorCheckChange);
blackCB.selectedProperty().addListener(colorCheckChange);
colorlessCB.selectedProperty().addListener(colorlessCheckChange);
                       //note: this is the only different one^^^

//making listeners
ChangeListener colorCheckChange = new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> ov,
        Boolean old_val, Boolean new_val) {
        if (new_val)
            colorlessCB.setSelected(false);
    }};
ChangeListener colorlessCheckChange = new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> ov,
        Boolean old_val, Boolean new_val) {
        if (new_val)
        {
            redCB.setSelected(false);
            blueCB.setSelected(false);
            greenCB.setSelected(false);
            blackCB.setSelected(false);
            whiteCB.setSelected(false);
        }
    }
};

第一种基本上只是确保在尝试选择其他颜色时未选择无颜色的SCB,反之亦然。这样还可以避免取消选择一个,而另一个自动重新选择自身的问题。

雍嘉勋
2023-03-14

单选按钮不会给你一个互斥的选择吗?只要确保你设置的组名是相同的——选择一个会自动取消选择另一个,你可以在动作事件中放入额外的逻辑。

比尝试围绕复选框重写相同的功能要好。

隆安然
2023-03-14

您可以使用更改跟踪或使用JavaFX的事件处理机制<有这样的复选框,

final CheckBox chk1 = new CheckBox("chk 1");
final CheckBox chk2 = new CheckBox("chk 2");

变更跟踪

chk1.selectedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        chk2.setSelected(!newValue);
    }
});

chk2.selectedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        chk1.setSelected(!newValue);
    }
});

使用事件处理

EventHandler eh = new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        if (event.getSource() instanceof CheckBox) {
            CheckBox chk = (CheckBox) event.getSource();
            System.out.println("Action performed on checkbox " + chk.getText());
            if ("chk 1".equals(chk.getText())) {
                chk2.setSelected(!chk1.isSelected());
            } else if ("chk 2".equals(chk.getText())) {
                chk1.setSelected(!chk2.isSelected());
            }
        }
    }
};

chk1.setOnAction(eh);
chk2.setOnAction(eh);
 类似资料:
  • 主要内容:创建一个选择框,示例,实例-2JavaFX选择框允许用户在几个选项之间快速选择。 创建一个选择框 我们可以使用中的构造函数来创建对象。 以下代码显示了如何使用其构造函数创建和填充选择框。 列表项是从可观察的列表来创建的。 我们还可以使用一个空的选择框使用它的默认构造函数,并使用方法设置列表项。 上面的代码还向选择框中添加了一个分隔符对象。分隔符分隔控件项目。 示例 上面的代码生成以下结果。 实例-2 以下代码显示了如何在中填充

  • 主要内容:创建复选框,复选框状态,示例复选框允许用户进行多项选择。例如,当订购披萨时,可以添加多个调味料。单选按钮或切换按钮用于单选或无选择。 创建复选框 我们可以使用中的构造函数来创建的对象。 创建不带标题的复选框,如下代码所示 - 要创建带有字符串标题的复选框,如下代码所示 - 创建复选框后,我们可以更改其文本并将其选中。 复选框状态 可以使用来表示三个状态: Yes No Not Applicable(不适用) “不适用”状态是

  • 我有一个带有方法的model类,它用@preupdate进行了注释。此方法调用我的方法: 我的实现:

  • 问题内容: 是否有机会检测用户为元素类型HTML所做的每个文件选择? 之前曾多次问过这个问题,但是如果用户再次选择相同的文件,通常不会建议该事件。 问题答案: 的值设置到每个事件。即使选择了相同的路径,这也会重置的值并触发事件。 注意:如果文件以’C:\ fakepath'为前缀是正常的。这是一项安全功能,可防止JavaScript知道文件的绝对路径。浏览器仍然内部知道它。

  • 我正在使用JavaFx,我有一个用sceneBuilder创建的表视图,它包含3列,其中一列用于复选框,还有一个名为print\u tab的按钮,我想在单击此按钮时使用复选框选择行- 我读了许多关于回调复选框的表列的示例,但不知道如何做到这一点。 这是控制器: 在模型类上,我有以下代码: } fxml代码: 任何想法? 编辑: 我试过这样做,但即使我勾选了一些复选框,我总是得到错误的结果,不是真的

  • 问题内容: 有时候,这种AJAX会触发,有时却不会,我来解释一下。 habit.js 仅在加载显示页面并刷新它之后才会触发,以便终端看起来像这样: 仅加载显示页面一次将无法完成工作,因为选中标记不会触发AJAX(请注意上面的所有GET和下面的GET缺少,我认为这与涡轮链接有关)。 该 显示页面 称为AJAX 这就是AJAX触发的 源代码days_missed_controller.rb 。 这是