gpt4 book ai didi

Java JMenuBar 未添加或正确显示

转载 作者:行者123 更新时间:2023-12-01 07:11:23 28 4
gpt4 key购买 nike

我正在尝试将 JMenuBar 的子类添加到用户界面,但由于某种原因它从未显示。我尝试过使用 JFrame.setJMenubar() 和 JFrame.add(),我尝试过从 SwingUtilities.invokeLater() 调用中添加它等...在使用 JMenuBar 本身而不是子类时它仍然有效,所以我怀疑与此有关。

这是初始化应用程序窗口的代码:

public DramaSimWindow() {
initializeSelf();
initializeContainers();
this.setVisible(true);
}

private void initializeSelf() {
initializeContentPane();
this.setBounds(100, 100, 800, 500);
this.setJMenuBar(new DramaSimMenuBar());
this.setResizable(false);
}

这是 JMenuBar 的子类,它作为私有(private)类位于主窗口类中:

private class DramaSimMenuBar extends JMenuBar {

private static final long serialVersionUID = 1L;

public DramaSimMenuBar() {
initializeSelf();
}

private void initializeSelf() {
menuBar = new JMenuBar();
initializeFileMenu();
initializeEditMenu();
}

private void initializeFileMenu() {
JMenu fileMenu = new JMenu("File");
fileMenu.add(new JMenuItem("New"));
fileMenu.add(new JMenuItem("Open"));
fileMenu.add(new JMenuItem("Save"));
fileMenu.add(new JMenuItem("Save as"));
fileMenu.add(new JMenuItem("Exit"));
menuBar.add(fileMenu);
}

private void initializeEditMenu() {
JMenu editMenu = new JMenu("Edit");
editMenu.add(new JMenuItem("Copy"));
editMenu.add(new JMenuItem("Cut"));
editMenu.add(new JMenuItem("Paste"));
menuBar.add(editMenu);
}
}

最佳答案

您一开始就不应该扩展 JMenuBar。只需创建使用 JMenuBar 而不是扩展它。顺便说一句,问题是您的 JMenuBar 子类不会向其自身添加菜单,而是向它创建的另一个 JMenuBar 添加菜单:

private void initializeSelf() {
menuBar = new JMenuBar();
...
menuBar.add(fileMenu);

应该是

private void initializeSelf() {
...
this.add(fileMenu);

关于Java JMenuBar 未添加或正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13615371/

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