防止被禁用的JMenuItem在被点击时隐藏菜单,可以通过以下方法实现:
JMenuItem menuItem = new JMenuItem("禁用的菜单项");
menuItem.setEnabled(false);
menuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 隐藏菜单的逻辑
}
});
menuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Component parent = menuItem.getParent();
if (parent instanceof JPopupMenu) {
((JPopupMenu) parent).setVisible(false);
}
}
});
完整的代码示例如下:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("JMenuItem禁用示例");
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("菜单");
JMenuItem menuItem = new JMenuItem("禁用的菜单项");
menuItem.setEnabled(false);
menuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Component parent = menuItem.getParent();
if (parent instanceof JPopupMenu) {
((JPopupMenu) parent).setVisible(false);
}
}
});
menu.add(menuItem);
menuBar.add(menu);
frame.setJMenuBar(menuBar);
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
这样,当用户点击禁用的JMenuItem时,菜单不会被隐藏,而是执行事件处理方法中的逻辑,隐藏菜单。
领取专属 10元无门槛券
手把手带您无忧上云