Java 如何跨方法重用受保护的JMenuItem变量?
为什么在actionPerformed()类的第一行,我不能使用Java 如何跨方法重用受保护的JMenuItem变量?,java,swing,protected,Java,Swing,Protected,为什么在actionPerformed()类的第一行,我不能使用受保护的JMenuItem菜单项我在MainMenuBar()类顶部声明的变量 第二行是我注释掉的,它很有效 但是,我希望能够跨类使用一个JMenuItem对象名,而不必重新实例化它 如何在此处正确重用menuItem 多谢各位 package base; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; imp
受保护的JMenuItem菜单项代码>我在MainMenuBar()类顶部声明的变量
第二行是我注释掉的,它很有效
但是,我希望能够跨类使用一个JMenuItem对象名,而不必重新实例化它
如何在此处正确重用menuItem
多谢各位
package base;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
public class MainMenuBar implements ActionListener {
protected JMenuBar menuBar;
protected JMenu menu;
protected JMenuItem menuItem;
JTextArea output;
String newline = "\n";
public JMenuBar getMenuBar() {
menuBar = new JMenuBar();
// 1st Menu
menu = new JMenu("File");
menu.setMnemonic(KeyEvent.VK_F);
menuItem = new JMenuItem("New Note");
menuItem.setMnemonic(KeyEvent.VK_N);
menu.add(menuItem);
menu.addSeparator();
menuItem = new JMenuItem("Exit");
menuItem.setMnemonic(KeyEvent.VK_X);
menu.addActionListener(this);
menu.add(menuItem);
menuBar.add(menu);
// 2nd Menu
menu = new JMenu("Help");
menu.setMnemonic(KeyEvent.VK_H);
menuItem = new JMenuItem("About Java Sticky Notes");
menuItem.setMnemonic(KeyEvent.VK_A);
menu.addActionListener(this);
menu.add(menuItem);
menuBar.add(menu);
return menuBar;
}
@Override
public void actionPerformed(ActionEvent e) {
menuItem source = new JMenuItem("MainMenuBar.java");
//JMenuItem source = (JMenuItem) (e.getSource());
String s = "Action event detected." + newline + " Event source: "
+ source.getText() + " (an instance of " + getClassName(source)
+ ")";
output.append(s + newline);
output.setCaretPosition(output.getDocument().getLength());
}
// Returns just the class name -- no package info.
protected String getClassName(Object o) {
String classString = o.getClass().getName();
int dotIndex = classString.lastIndexOf(".");
return classString.substring(dotIndex + 1);
}
}
如果出现语法错误,编译器会假定menuItem
是一个类,因为它后面跟着source
。更改以下内容:
menuItem source = new JMenuItem("MainMenuBar.java");
致:
但是您必须注意源代码,因为它在下面的行中使用
menuItem = new JMenuItem("MainMenuBar.java");