【问题标题】:Java BoxLayout gives Incorrect ResultsJava BoxLayout 给出不正确的结果
【发布时间】:2011-11-30 05:13:19
【问题描述】:

我有两个想要排列的 JPanel,一个在另一个之上,在一个更大的 JPanel 内。 “panel_controls”覆盖 .getPreferredSize()。代码:

public final class GUIPanelMain extends JPanel {
    //...

    private JPanel panel_images;
    private JPanel panel_controls;

    //...

    private void addPanels() {
        new BoxLayout(this,BoxLayout.Y_AXIS); //Bleh!  Still is horizontal!
        this.add(panel_images);
        this.add(panel_controls);
    }

    //...
}

不幸的是,布局无论如何都是水平设置的。只有当我调整 JPanel 的大小时,组件才会全部放在正确的位置(在这种情况下是垂直的)。

我在文档中阅读了以下内容:“BoxLayout 尝试使列中的所有组件与最宽的组件一样宽。如果失败,它将根据它们的 X 对齐方式水平对齐它们”

那么失败的条件是什么?如何强制它垂直对齐?

谢谢,

【问题讨论】:

  • 您不应覆盖“panel_controls”的首选大小。如果您正确使用布局管理器,布局管理器将确定首选尺寸。

标签: java swing alignment jpanel boxlayout


【解决方案1】:

试试

this.setLayout( new BoxLayout(this, BoxLayout.Y_AXIS));

您基本上是在创建一个未使用且未被引用的 BoxLayout 新实例。

【讨论】:

  • 你不需要在方法调用前面加上this。它没有任何意义。
  • @SteveKuo OP 有 this 用于其他电话。有时为了清楚起见会添加它。
  • +1,如果您没有专门设置布局管理器,那么 JPanel 将使用 FlowLayout。
  • 它没有说明任何事情,因为该方法可以是静态的、继承的或在此类中定义的。
猜你喜欢
  • 2012-08-27
  • 2017-12-14
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多