You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从另一个控制器访问FXML方法并减少代码冗余

解决方案

方案1:抽取静态工具类(实现成本最低)

将通用退出逻辑封装到独立的工具类中,两个控制器直接调用即可,不需要修改原有控制器的结构。
工具类代码:

public class AppCommonUtil {
    public static void exitApplication() {
        System.out.println("Goodbye " + System.getProperty("user.name"));
        System.exit(0);
    }
}

修改后两个控制器的代码统一简化为:

@FXML
private void onExitButtonClick() {
    AppCommonUtil.exitApplication();
}

适用场景:仅少量通用逻辑、控制器不需要共享其他属性或方法的情况

方案2:基类控制器继承(代码冗余度最低)

抽象出公共父控制器,把公共的FXML交互方法直接定义在父类中,子类控制器继承后无需重复编写对应方法。
父控制器代码:

public class BaseController {
    @FXML
    protected void onExitButtonClick() {
        System.out.println("Goodbye " + System.getProperty("user.name"));
        System.exit(0);
    }
}

两个业务控制器直接继承基类即可,不需要再写退出按钮的点击方法:

// MenuController.java
public class MenuController extends BaseController {
    // 仅编写菜单场景独有的业务逻辑
}
// GameOverController.java
public class GameOverController extends BaseController {
    // 仅编写GameOver场景独有的业务逻辑
}

注意:需要保证两个FXML文件中退出按钮的onAction属性都绑定为onExitButtonClick,FXMLLoader会自动匹配父类的@FXML注解方法
适用场景:多个控制器存在大量通用交互逻辑、需要共享属性或通用方法的场景

方案3:全局事件绑定(无需修改控制器代码)

如果不想调整现有控制器的继承结构或代码,也可以在场景加载时统一给所有退出按钮绑定公共事件逻辑,不过这种方案耦合度相对较高,适合临时批量添加通用逻辑的场景。

内容的提问来源于stack exchange,提问作者Cheang Wai Bin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:06