java - BorderLayout.NORTH 行为异常

标签 java swing layout components border-layout

我有一个 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 在其上方居中: Looks good.

但是,如果窗口的大小调整超过某个阈值,JPanel 会更改位置:

Not looking good.

缩小窗口会使其跳回其先前(正确)的位置。

我已阅读javadoc for BorderLayout而且我之前也用过,不过目前还没有遇到这种现象。 javadoc 说“NORTH 和 SOUTH 组件可能会水平拉伸(stretch);”但我不认为这算作拉伸(stretch)。

除了添加一些监听器和强制性的 setVisiblesetEnabled 等之外,没有从构造函数中调用其他方法。

关于为什么会发生这种情况或如何纠正它有什么想法吗?

最佳答案

JPanel 默认使用 FlowLayout

尝试使用

content = new JPanel(new BorderLayout());

代替

关于java - BorderLayout.NORTH 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16128272/

相关文章:

android - 设置 ImageView 的权重和参数

css - 为什么我的两列在 IE7 中不能正确对齐?

javax.persistence.NoResultException : getSingleResult() did not retrieve any entities

java - 四元数相乘时结果无效,不知道为什么

java - JButton MouseListener 没有响应

java - 使用JTable类时,JScrollPane的构造函数和它的add方法有什么区别?

java - mssql-jdbc 版本 6.2.2.jre8 依赖性导致版本 6.1.0.jre7 陷入 war

java,以编程方式断开网络连接

java - 我试图在 JFrame 中绘制一个字符串,但它不起作用..请帮忙

android - 为什么这一行 xmlns :android ="http://schemas.android.com/apk/res/android" must be the first in the layout xml file?