JMenuBar可见性混乱



我正在学习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 不可见?为什么?

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

这是 Swing 组件的常见行为。

参见组件 javadoc

如果添加或删除组件:

如果容器已显示,则层次结构必须 此后进行验证,以显示添加的组件。

相关内容

  • 没有找到相关文章