“退出”MenuItem响应完美,但“更改名称”是一个问题..我无法弄清楚什么是错的,有人可以帮忙吗...我知道userName.setUserName工作正常..因为我我在另一个班级使用它,它完美无缺。只是无法弄清楚什么是错的
这是代码
public class MenuBar extends JMenuBar{
// variable declaration
private JMenu menu;
private JMenuItem menuItem;
private JMenuItem changed_Name;
private JMenuItem exit;
public MenuBar(){
init();
}
private void init(){
menu = new JMenu("File");
add(menu);
changed_Name = new JMenuItem("Change Name");
changed_Name.setMnemonic(KeyEvent.VK_C);
changed_Name.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, KeyEvent.ALT_MASK));
changed_Name.getAccessibleContext().setAccessibleDescription("This Will Allow a Name Change");
menu.add(changed_Name);
exit = new JMenuItem("Exit");
menu.add(exit);
menu = new JMenu("Help");
add(menu);
menuItem = new JMenuItem("Help & Docs");
//menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, KeyEvent.CHAR_UNDEFINED) );
menuItem.getAccessibleContext().setAccessibleDescription("Get Help or View Software documents");
menu.add(menuItem);
menuItem = new JMenuItem("About");
menu.add(menuItem);
MenuHandler menuHandler = new MenuHandler();
menuItem.addActionListener(menuHandler);
exit.addActionListener(menuHandler);
}
private class MenuHandler implements ActionListener{
AgentName userName = new AgentName();
@Override
public void actionPerformed(ActionEvent e) throws UnsupportedOperationException {
Object menuItem_Command = e.getActionCommand();
if(menuItem_Command.equals("Change Name")){
userName.setUserName(userName.getUserName());
}
else if(menuItem_Command.equals("Exit")){
System.exit(0);
}
}
}
}
答案 0 :(得分:2)
您从未使用MenuHandler
changed_name
...
JMenuItem
此外,请注意,您要多次重新分配menuItem
,这意味着仅About
已注册MenuHandler
例如......
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setJMenuBar(new MenuBar());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class MenuBar extends JMenuBar {
// variable declaration
private JMenu menu;
private JMenuItem menuItem;
private JMenuItem changed_Name;
private JMenuItem exit;
public MenuBar() {
init();
}
private void init() {
menu = new JMenu("File");
add(menu);
MenuHandler menuHandler = new MenuHandler();
changed_Name = new JMenuItem("Change Name");
changed_Name.setMnemonic(KeyEvent.VK_C);
changed_Name.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, KeyEvent.ALT_MASK));
changed_Name.getAccessibleContext().setAccessibleDescription("This Will Allow a Name Change");
changed_Name.addActionListener(menuHandler);
menu.add(changed_Name);
exit = new JMenuItem("Exit");
menu.add(exit);
menu = new JMenu("Help");
add(menu);
menuItem = new JMenuItem("Help & Docs");
//menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, KeyEvent.CHAR_UNDEFINED) );
menuItem.getAccessibleContext().setAccessibleDescription("Get Help or View Software documents");
menuItem.addActionListener(menuHandler);
menu.add(menuItem);
menuItem = new JMenuItem("About");
menuItem.addActionListener(menuHandler);
menu.add(menuItem);
exit.addActionListener(menuHandler);
}
private class MenuHandler implements ActionListener {
// AgentName userName = new AgentName();
@Override
public void actionPerformed(ActionEvent e) throws UnsupportedOperationException {
Object menuItem_Command = e.getActionCommand();
System.out.println(menuItem_Command);
if (menuItem_Command.equals("Change Name")) {
System.out.println("Yippe");
// userName.setUserName(userName.getUserName());
} else if (menuItem_Command.equals("Exit")) {
System.exit(0);
}
}
}
}
public class TestPane extends JPanel {
public TestPane() {
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
一般来说,你真的需要扩展JMenuBar
,只需创建一个实例并添加你需要的菜单
您也可以考虑查看How to Use Actions,它们是自包含的单元,其中包含自己的配置和操作逻辑
例如......
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import static javax.swing.Action.ACCELERATOR_KEY;
import static javax.swing.Action.MNEMONIC_KEY;
import static javax.swing.Action.NAME;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setJMenuBar(new MenuBar());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class ChangeNameAction extends AbstractAction {
public ChangeNameAction() {
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_1, KeyEvent.ALT_MASK));
putValue(MNEMONIC_KEY, KeyEvent.VK_C);
putValue(NAME, "Change Name");
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Change name");
}
}
public class ExitAction extends AbstractAction {
public ExitAction() {
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_4, KeyEvent.ALT_MASK));
putValue(MNEMONIC_KEY, KeyEvent.VK_X);
putValue(NAME, "Exit");
}
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
public class HelpAction extends AbstractAction {
public HelpAction() {
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
putValue(MNEMONIC_KEY, KeyEvent.VK_H);
putValue(NAME, "Help & Docs");
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Help and docs");
}
}
public class AboutAction extends AbstractAction {
public AboutAction() {
putValue(NAME, "About");
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("About");
}
}
public class MenuBar extends JMenuBar {
// variable declaration
private JMenu menu;
private JMenuItem menuItem;
private JMenuItem changed_Name;
private JMenuItem exit;
public MenuBar() {
init();
}
private void init() {
menu = new JMenu("File");
add(menu);
menu.add(new ChangeNameAction());
menu.add(new ExitAction());
menu = new JMenu("Help");
add(menu);
menu.add(new HelpAction());
menu.add(new AboutAction());
}
private class MenuHandler implements ActionListener {
// AgentName userName = new AgentName();
@Override
public void actionPerformed(ActionEvent e) throws UnsupportedOperationException {
Object menuItem_Command = e.getActionCommand();
System.out.println(menuItem_Command);
if (menuItem_Command.equals("Change Name")) {
System.out.println("Yippe");
// userName.setUserName(userName.getUserName());
} else if (menuItem_Command.equals("Exit")) {
System.exit(0);
}
}
}
}
public class TestPane extends JPanel {
public TestPane() {
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
答案 1 :(得分:0)
它可能有效,但您没有收到反馈,因为您要将名称更改为上一个名称。如果你在setUserName方法中加入一些其他值,你会看到