JMenuBar能见度混乱

时间:2016-01-20 17:24:08

标签: java jframe 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 not visible?Why?

1 个答案:

答案 0 :(得分:1)

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

这是Swing组件的常见行为。

请参阅Component javadoc

如果添加或删除组件:

  

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