【问题标题】:how to work with multiple buttons in JavaFX?如何在 JavaFX 中使用多个按钮?
【发布时间】:2021-10-19 06:09:44
【问题描述】:

我有一个关于 JavaFX 按钮的问题。我的场景中有一组 4 个按钮。前三个按钮标记为“主页”、“帐户”、“地图”。最后一个按钮称为“Go”

我正在使用button.setOnAction(new EventHandler<ActionEvent>(){ })

为每个按钮控制它将触发的事件。我的问题是我想点击前三个按钮(帐户、主页、地图)中的一个,但在点击 "go" 按钮之前不执行该事件。

例如,我点击主页,按钮会改变颜色以显示它已被点击。我按下 go,将执行与主页按钮相关的操作。我该怎么做这样的事情?

我遇到的另一个问题是如何确保一次只单击前三个按钮(主页、帐户和地图)中的一个。如果我先单击“主页”,然后单击“地图”,然后单击“开始”我想操作 Map 事件,所以当按下 map 时 home 会被释放。

感谢您的帮助:)

【问题讨论】:

  • 我建议您更改每个已单击按钮的颜色和布尔值。在 go 按钮中,您检查布尔值并执行任何操作。对于第二部分,您可以只使用一个函数将尚未单击的其他按钮的布尔值设置为 false。希望这会有所帮助。
  • 为什么要强制用户点击两次?

标签: button javafx


【解决方案1】:

正如 cmets 中所指出的,您可以将ToggleButton(或RadioButton)用于“主页”“帐户”“地图”,并将它们添加到ToggleGroup:

public class App extends Application {

    @Override
    public void start(Stage stage) {

        ToggleButton buttonHome = new ToggleButton("Home");
        ToggleButton buttonAccount = new ToggleButton("Account");
        ToggleButton buttonMap = new ToggleButton("Map");
    
        ToggleGroup group = new ToggleGroup();
    
        group.getToggles().addAll(buttonHome, buttonAccount, buttonMap);
    
        Button buttonGo = new Button("Go");

        // Disable button "Go" when no other button is selected (remove this line if not needed)
        buttonGo.disableProperty()
                    .bind(group.selectedToggleProperty().isNull());
    
        buttonGo.setOnAction(e -> {
            ToggleButton selected = (ToggleButton)group.getSelectedToggle();
            if (selected != null) {
                System.out.println(selected.getText());
            }
        });
    
        HBox buttons = new HBox(5, buttonHome, buttonAccount, buttonMap);
    
        VBox pane = new VBox(10, buttons, buttonGo);
        pane.setAlignment(Pos.CENTER_RIGHT);

        Scene scene = new Scene(pane);

        stage.setScene(scene);
        stage.show();
    }

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

}

输出:

如果将所有ToggleButton 替换为RadioButton

【讨论】:

  • 非常感谢!这真的很有帮助
  • 我很高兴它有帮助 ;)
  • 请注意,切换按钮和单选按钮之间存在细微差别。一次可以选择多个切换按钮,但单选按钮不能。我认为如果您将 css 应用于单选按钮(切换按钮 css 或 pill css),您可以使单选按钮看起来更像一个常规按钮,尽管我没有尝试过。
  • @jewelsea 也许我没有正确理解您的评论,但是当您在ToggleGroup 中组合切换按钮时,一次只能选择一个。 RadioButton 扩展了 ToggleButton,当将 RadioButtonToggleButton 添加到 ToggleGroup 时,您一次只能选择一个。
  • 很高兴知道,我想如果您想确保始终选择按钮,RadioButton 应该是最佳选择。
猜你喜欢
  • 2017-04-19
  • 2017-04-28
  • 2017-02-10
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 2020-11-02
相关资源
最近更新 更多