gpt4 book ai didi

java - 从 JMenuBar 中删除/添加 JMenu

转载 作者:行者123 更新时间:2023-11-30 06:36:26 25 4
gpt4 key购买 nike

我正在尝试从 JMenuBar 中删除/添加 JMenu,但它不起作用。似乎使用的事件没有从 JMenuBar 中删除 JMenu。

这是我正在使用的代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Try1 {
private JFrame mainframe;

public Try1(){
prepareGUI();
}
public static void main(String[] args){
Try1 try1 = new Try1();
try1.showMenuDemo();

}
private void prepareGUI(){
mainframe = new JFrame("Java SWING Examples");
mainframe.setSize(800, 400);
mainframe.setLayout(new GridLayout(16,1));

mainframe.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
}
});

}

private void showMenuDemo(){
//create a menu bar
final JMenuBar menuBar = new JMenuBar();

JMenu fileMenu = new JMenu("File");
JMenu editMenu = new JMenu("Edit");
JMenu CutMenu = new JMenu("Cut");
JMenu aboutMenu = new JMenu("About");

JMenuItem newMenuItem = new JMenuItem("New");


final JCheckBoxMenuItem showWindowMenu = new JCheckBoxMenuItem("Show Cut",true);
showWindowMenu.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
if(showWindowMenu.getState()){
System.out.println(showWindowMenu.getState());
menuBar.add(CutMenu);
} else{
System.out.println(showWindowMenu.getState());
menuBar.remove(CutMenu);
}
}
});
fileMenu.add(newMenuItem);
fileMenu.add(showWindowMenu);

menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(aboutMenu);
menuBar.add(CutMenu);


mainframe.setJMenuBar(menuBar);
mainframe.setVisible(true);
}
}

知道为什么只有在 menuBar.add(aboutMenu) 与 menuBar(CutMenu) 的切换位置时它才起作用吗?

最佳答案

在对菜单栏进行更改后,您需要重新验证并重新绘制菜单栏,就像添加或删除其组件的任何其他容器一样:

showWindowMenu.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (showWindowMenu.getState()) {
System.out.println(showWindowMenu.getState());
menuBar.add(CutMenu);
} else {
System.out.println(showWindowMenu.getState());
menuBar.remove(CutMenu);
}

// ************** add this ****************
menuBar.revalidate();
menuBar.repaint();
}
});

在这种情况下,您绝对不需要重新验证,因为剪切菜单位于末尾,但最好保留它,因为如果删除或更改不在前端的菜单组件,将会出现如果您不调用 revalidate(),则会出现间隙。您可以通过删除“关于”菜单来测试这一点,而不是查看是否需要 revalidate()

关于java - 从 JMenuBar 中删除/添加 JMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45154876/

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