我有一个 JFrame-descendant 窗口,带有一个 JMenuBar 和两个存储在 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 会更改位置:
缩小窗口会使其跳回其先前(正确)的位置。
我已阅读javadoc for BorderLayout而且我之前也用过,不过目前还没有遇到这种现象。 javadoc 说“NORTH 和 SOUTH 组件可能会水平拉伸(stretch);”但我不认为这算作拉伸(stretch)。
除了添加一些监听器和强制性的 setVisible
、setEnabled
等之外,没有从构造函数中调用其他方法。
关于为什么会发生这种情况或如何纠正它有什么想法吗?
最佳答案
JPanel
默认使用 FlowLayout
。
尝试使用
content = new JPanel(new BorderLayout());
代替
关于java - BorderLayout.NORTH 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16128272/