我有一个带有 JMenuBar 的 JFrame 后代窗口 a 和两个存储在 JPanel 中的组件。一个是 JTabbedPane,它占据了屏幕的大部分,另一个是小的 JPanel,它又包含一系列按钮。它们是这样构造的:
//in constructor:
menubar = new BFIDEMenuBar(this);
setJMenuBar(menubar);
content = new JPanel();
add(content);
buttons = new BFIDEButtonBar();
editors = new JTabbedPane();
content.add(buttons, BorderLayout.NORTH);
content.add(editors, BorderLayout.CENTER);
当窗口小于一定大小时,组件按预期排列:JTabbedPane 占据中心,“按钮”JPanel 居中:
但是,如果重新调整窗口大小超过某个阈值,则 JPanel 会更改位置:
缩小窗口会导致它跳回到之前的(正确的)位置。
我已经阅读了BorderLayout 的 javadoc并且我之前使用过它,但是我还没有遇到过这种现象。javadoc 说“NORTH 和 SOUTH 组件可以水平拉伸;” 但我不;这算作拉伸。
除了添加一些侦听器和强制性的 , 等之外,不会从构造函数中调用其他setVisible
方法setEnabled
。
关于为什么会发生这种情况或如何纠正它的任何想法?