【问题标题】:Handling Many Buttons in JavaFX在 JavaFX 中处理许多按钮
【发布时间】:2018-03-21 21:23:38
【问题描述】:

假设我有一个 JavaFX 应用程序并且想要在场景之间切换。每个场景都包含按钮,按下时会导致以下场景。

为了让我的按钮命令在按下时执行什么操作,我尝试执行以下操作:

for (Button button : buttonsArray) //for each Button in ArrayList
    button.setOnAction( e -> handle(frameID, button.ID) ); 
    //give it the data about frame and button

问题是,handle 方法包含大量的 Switch-Case 语句:

switch (frameID)  //lokking for a certain frame
{
    case 1: switch (ID)  // and a certain button
            {
             case 1: // lead to the certain scene 
             break;
            } break;
}

即使它不会使代码复杂化,写括号或break 错误也很容易破坏一切。也感觉有点像垃圾代码。

那么,管理所有这些按钮的更好方法是什么?我对 Java 和 OOP 比较陌生,但我乐于学习新事物。

【问题讨论】:

  • 编辑问题以包含mcve,完整的最少代码,有人可以复制和粘贴来运行和重现您的功能。它不需要包含您所有的交换机 ID,可能只包含其中的四个,以便代表正在发生的事情。

标签: button javafx switch-statement case handle


【解决方案1】:

尝试为每个按钮创建一个动作事件

public void PressButton(ActionEvent action){
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("YourFXML.fxml"));
            Parent root = (Parent) fxmlLoader.load();
            Stage stage = new Stage();
            stage.setScene(new Scene(root));
            stage.show();
}

【讨论】:

    【解决方案2】:

    为什么不从场景构建器中添加按钮,然后为每个按钮添加一个动作

    public void button1Action(ActionEvent event)
    {do some work }
    

    public void button2Action(ActionEvent event) { //do some work }

    【讨论】:

    • 你可能想添加一些细节来说明如何做到这一点:)
    猜你喜欢
    • 2021-04-24
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多