gpt4 book ai didi

java - JMenuBar 可见性困惑

转载 作者:行者123 更新时间:2023-11-30 07:39:24 25 4
gpt4 key购买 nike

我正在学习 Java 中的 GUI。我在这里有点困惑。当我像这样放置 window.setVisible(true); 时,如果调整 JMenuBar 的大小,我只会看到它(如果没有某种交互,它不会显示)。

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;

public class Main {

public static void main(String[] args) {

JFrame window = new JFrame("My App");
window.setSize(500, 500);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
JMenuBar bar = new JMenuBar();
window.setJMenuBar(bar);
JMenu menu = new JMenu("File");
bar.add(menu);

}

}

但是当我将它放在最底部时,它会按预期显示。这是为什么?

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;

public class Main {

public static void main(String[] args) {

JFrame window = new JFrame("My App");
window.setSize(500, 500);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar bar = new JMenuBar();
window.setJMenuBar(bar);
JMenu menu = new JMenu("File");
bar.add(menu);
window.setVisible(true);

}

}

这里说明必须在最后调用,但是这背后的原因是什么?

java JMenuBar not visible?Why?

最佳答案

添加组件后,您必须重新绘制容器。因此,如果您在窗口可见后添加菜单栏,它将在下次重新绘制后弹出,在您的示例中,在调整大小后。如果菜单栏是在设置窗口可见之前添加的,则在第一次绘制时会绘制菜单栏。

这是 Swing 组件的常见行为。

参见Component javadoc

如果添加或删除组件:

If the container has already been displayed, the hierarchy must be validated thereafter in order to display the added component.

关于java - JMenuBar 可见性困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34906535/

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