gpt4 book ai didi

Javafx场景生成器: Handling Multiple mouseClick() events from different source objects

转载 作者:行者123 更新时间:2023-12-02 10:41:18 25 4
gpt4 key购买 nike

我是 java FX 新手,尤其是场景构建器新手。我有一个小应用程序,可以根据体重计算成绩。我向其中添加了一个菜单栏,但 Scene Builder 只允许我绑定(bind) mouseClick() 事件。问题是,我已经有一个与此事件相关的计算按钮(用于计算成绩)。我希望我的 MenuItem 打开我在单击时创建的对话框。

这是我当前尝试让该方法发挥作用的尝试:

@FXML
public void mouseClick(MouseEvent mouseEvent)
{
if (mouseEvent.getSource().equals(calcBtn))
{
DecimalFormat df = new DecimalFormat("#.##");
double result = calcGrade();
resultLbl.setText("Overall Grade: " + df.format(result) + "%");
}
if (mouseEvent.getSource().equals(aboutMenu))
{
DialogBox.showInformation("About", "Some dialog here.");
}
}

在 Swing 中,我记得这样做是为了处理多个源对象:

if (e.getSource() == menuItem)
{
//do stuff
}
else if (e.getSource() == calculateBtn)
{
//calculate stuff
}

但是这不起作用,计算按钮的代码无论如何都会执行。

由于场景生成器将操作与 Controller 类联系起来的方式,我不确定如何在单击鼠标按钮时分离这两个不同源之间的操作。当我尝试绑定(bind)自定义事件时,场景生成器对我大喊大叫,并且只允许 mouseClick()。处理这种情况有什么好的解决方案吗?

最佳答案

我建议对这两个事件使用不同的处理程序方法。此外,应使用 onAction 事件处理程序(MenuItem 不是 Node,因此不能是 MouseEvent 的源):

<MenuItem text="Do Something" onAction="#doSomething" />
...
<Button text="Do something else" onAction="#doSomethingElse" />
@FXML
private void doSomething() {
System.out.println("Menu Item clicked");
}

@FXML
private void doSomethingElse() {
System.out.println("Button clicked");
}

这样更容易维护代码。 (想象一下,您需要更改其中一个菜单项的操作实现,并且使用相同的方法处理其中的 30 个;您需要多长时间才能找到 if/else if 的正确部分。大多数 IDE 支持导航到一个方法。)

<小时/>

如果您想坚持检查源代码,只要事件类型可分配给方法参数就应该没问题:

<MenuItem fx:id="menuItem" text="Do Something" onAction="#doSomething" />
...
<Button fx:id="button" text="Do something else" onAction="#doSomething" />
@FXML Button button;
@FXML MenuItem menuItem;

@FXML
private void doSomething(ActionEvent event) {
Object source = event.getSource();
if (button == source) {
System.out.println("button clicked");
} else if (menuItem == source) {
System.out.println("menu item clicked");
}
}

如果您想使用同样的方法。

关于Javafx场景生成器: Handling Multiple mouseClick() events from different source objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52902231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com