我如何利用辅助 class 来处理我的事件?
How can I utilize a secondary class to handle my events?
我创建了两个单独的 class 实体,同时实例化了我的菜单栏,第二个 class 实体用于处理事件;因为我想处理菜单栏上的很多选项。
我已经设置好菜单栏及其结构,现在下一步是处理用户单击菜单栏上的选项时的事件。
这是我的主菜单栏中的两个项目的片段 class:
JMenuItem addOrangeItem = new JMenuItem("Orange");
addOrangeItem.addActionListener(new MenuActionListener().orangeActionPerformed(e));
JMenuItem addAppleItem = new JMenuItem("Apple");
addAppleItem.addActionListener(new MenuActionListener().appleActionPerformed(e));
这是我的事件处理 class:
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!");
}
}
问题出在我的主菜单栏中的这一行代码 class:
addAppleItem.addActionListener(new MenuActionListener().appleActionPerformed(e));
而我的 ActionEvent 的 e
带有红色下划线,我不确定如何让它工作。
我的代码的目标是 select Apple/orange item/s,然后我的事件处理 class 将 return 一些代码。
我的问题是如何编辑上面的代码行才能正确处理我的菜单栏项目?
如果您需要更多信息,请告诉我,我会马上处理。
非常感谢任何帮助,谢谢。
这是一个无效的语法: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:
}
}
}
请注意,setActionCommand
是 AbstractButton 中的一个方法,例如也适用于 JButton
。
我创建了两个单独的 class 实体,同时实例化了我的菜单栏,第二个 class 实体用于处理事件;因为我想处理菜单栏上的很多选项。
我已经设置好菜单栏及其结构,现在下一步是处理用户单击菜单栏上的选项时的事件。
这是我的主菜单栏中的两个项目的片段 class:
JMenuItem addOrangeItem = new JMenuItem("Orange");
addOrangeItem.addActionListener(new MenuActionListener().orangeActionPerformed(e));
JMenuItem addAppleItem = new JMenuItem("Apple");
addAppleItem.addActionListener(new MenuActionListener().appleActionPerformed(e));
这是我的事件处理 class:
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!");
}
}
问题出在我的主菜单栏中的这一行代码 class:
addAppleItem.addActionListener(new MenuActionListener().appleActionPerformed(e));
而我的 ActionEvent 的 e
带有红色下划线,我不确定如何让它工作。
我的代码的目标是 select Apple/orange item/s,然后我的事件处理 class 将 return 一些代码。
我的问题是如何编辑上面的代码行才能正确处理我的菜单栏项目?
如果您需要更多信息,请告诉我,我会马上处理。
非常感谢任何帮助,谢谢。
这是一个无效的语法: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:
}
}
}
请注意,setActionCommand
是 AbstractButton 中的一个方法,例如也适用于 JButton
。