gpt4 book ai didi

java - 我如何利用二级类(class)来处理我的事件?

转载 作者:行者123 更新时间:2023-11-30 06:50:03 24 4
gpt4 key购买 nike

我创建了两个单独的类,同时实例化了菜单栏,并创建了第二个类来处理事件;因为菜单栏上确实有很多我想要处理的选项。

我已经设置了菜单栏及其结构,现在下一步是处理用户单击菜单栏上的选项时的事件。

这是我的主菜单栏类中的两个项目的片段:

    JMenuItem addOrangeItem = new JMenuItem("Orange");
addOrangeItem.addActionListener(new MenuActionListener().orangeActionPerformed(e));

JMenuItem addAppleItem = new JMenuItem("Apple");
addAppleItem.addActionListener(new MenuActionListener().appleActionPerformed(e));

这是我的事件处理类:

public class MenuActionListener implements ActionListener {

public void orangeActionPerformed(ActionEvent e) {
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("I have chosen an orange!");
}


public void appleActionPerformed(ActionEvent e) {
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("I have chosen an apple!");
}
}

问题出在我的主菜单栏类中的这行代码:

addAppleItem.addActionListener(new MenuActionListener().appleActionPerformed(e)); 而我的 ActionEvent 的 e 下划线为红色,我不知道该做什么让它工作。

我的代码的目标是选择 Apple/orange 项目,然后我的事件处理类将返回一些代码。

我的问题是如何编辑上面的代码行,以便我可以正确处理我的菜单栏项目?

如果您需要更多信息,请告诉我,我会立即处理。

非常感谢任何帮助,谢谢。

最佳答案

这是无效语法:addActionListener(new MenuActionListener().orangeActionPerformed(e))

addActionListener 想要一个 ActionListener 对象,而不是 void (这是 new MenuActionListener().orangeActionPerformed(e) 的结果) ),并且e在这里是一个未知变量。

这将起作用:addActionListener(new MenuActionListener()),但是由于您需要根据按下的项目进行不同的操作,因此您可以使用操作命令系统:

JMenuItem 上设置一个操作命令(另请注意,ActionListener 的一个实例足以用于两个按钮):

ActionListener listener = new MenuActionListener();

JMenuItem addOrangeItem = new JMenuItem("Orange");
addOrangeItem.setActionCommand("orange");// set action command
addOrangeItem.addActionListener(listener);

JMenuItem addAppleItem = new JMenuItem("Apple");
addAppleItem.setActionCommand("apple");// set action command
addAppleItem.addActionListener(listener);

然后在监听器中检索操作命令(在 actionPerformed 中),并决定要做什么:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MenuActionListener implements ActionListener {

public void orangeActionPerformed() {
System.out.println("I have chosen an orange!");
}

public void appleActionPerformed() {

System.out.println("I have chosen an apple!");

}

@Override
public void actionPerformed(final ActionEvent e) {

String command = e.getActionCommand();

switch (command) {

case "orange":
orangeActionPerformed();
break;
case "apple":
appleActionPerformed();
break;
default:

}

}
}

请注意,setActionCommandAbstractButton 中的方法。 ,例如也适用于 JButton

关于java - 我如何利用二级类(class)来处理我的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43000677/

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