gpt4 book ai didi

java - 覆盖 JMenu 上执行的操作

转载 作者:行者123 更新时间:2023-12-01 23:57:54 25 4
gpt4 key购买 nike

我试图在用户单击“关于”菜单时显示一个弹出窗口。在Java中可以做到这一点吗?我发现单击菜单不会调用 actionPerformed。经过一番搜索后,我发现我应该尝试使用这个:

new AbstractAction("Do XY")

但 NetBeans 告诉我需要一个标识符。有没有其他方法可以做到这一点,或者Java不允许按钮直接在菜单栏上?

最佳答案

当然,您可以在 Java 中执行此操作。您只需将 MenuListener 添加到菜单即可。

这是一个这样的例子(它也实现了传统的“关于”菜单项):

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;

public class TestAboutMenu {

protected void initUI() {
final JFrame frame = new JFrame("test");
JMenuBar bar = new JMenuBar();
JMenu help = new JMenu("Help");
help.addMenuListener(new MenuListener() {

@Override
public void menuSelected(MenuEvent e) {
showAboutDialog(frame);
}

@Override
public void menuDeselected(MenuEvent e) {
// TODO Auto-generated method stub

}

@Override
public void menuCanceled(MenuEvent e) {
// TODO Auto-generated method stub

}
});
JMenuItem about = new JMenuItem(new AbstractAction("About") {

@Override
public void actionPerformed(ActionEvent e) {
showAboutDialog(frame);
}
});
help.add(about);
bar.add(help);
frame.setJMenuBar(bar);
frame.setSize(400, 400);
frame.setVisible(true);
}

protected void showAboutDialog(final JFrame frame) {
JDialog dialog = new JDialog(frame);
dialog.add(new JLabel("About this program"));
dialog.setModal(true);
dialog.pack();
dialog.setLocationRelativeTo(frame);
dialog.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
new TestAboutMenu().initUI();
}
});
}
}

关于java - 覆盖 JMenu 上执行的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15312494/

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