Java FlowLayout的顶部对齐

Java FlowLayout的顶部对齐,java,swing,layout,Java,Swing,Layout,我使用的是FlowLayoutJPanel。当子构件高度不同时,面板看起来很难看。我正在寻找一种解决方案,使它们顶部对齐(类似于HTML表格单元格的valign=“top”) 看看 您应该能够使用BoxLayout。它支持垂直对齐。唯一的问题是需要手动插入水平支柱构件 或者你也可以试着使用。在您的情况下,您将使用: RelativeLayout rl = new RelativeLayout(RelativeLayout.X_AXIS, 5); rl.setBorderGap(5); rl.se

我使用的是
FlowLayout
JPanel
。当子构件高度不同时,面板看起来很难看。我正在寻找一种解决方案,使它们顶部对齐(类似于HTML表格单元格的
valign=“top”

看看


您应该能够使用BoxLayout。它支持垂直对齐。唯一的问题是需要手动插入水平支柱构件

或者你也可以试着使用。在您的情况下,您将使用:

RelativeLayout rl = new RelativeLayout(RelativeLayout.X_AXIS, 5);
rl.setBorderGap(5);
rl.setAlignment(RelativeLayout.LEADING);
JPanel panel = new JPanel( rl );
panel.add(...);

我意识到这个问题是一年前提出来的,但和我一样,我认为很多人会无意中发现这个论坛帖子,并留下来尝试解决bug报告中建议的问题(仅供参考)

自JDK1.6以来,无论哪种方法都有一个更好的答案。Flowlayout具有以下方法:

public void setAlignOnBaseline(boolean alignOnBaseline)
如果在flowlayout上使用此方法并将其设置为true,则当flowlayout布局组件时,它将检查每个组件的基线并沿此基线对齐组件

但这并不是你需要做的全部

相关组件必须以这种方式覆盖以下两种方法:

@Override
public Component.BaselineResizeBehavior getBaselineResizeBehavior() {
    return Component.BaselineResizeBehavior.CONSTANT_ASCENT;
}

@Override
public int getBaseline(int width, int height) {
    return 0;
}
它们是JComponent和layouts中的方法,LayoutManager使用这些方法来确定如何布局组件

如果执行上述步骤,所有组件将沿每行顶部对齐。当然,如果您只想使用像JButton这样的组件,那么显然必须对其进行扩展,以实现您想要的目标。。。但这并不像用您必须调试的变通方法覆盖layoutcontainer那样需要做很多工作。至少我这么认为

祝你好运,
-Asaf

你看过MIGALAYOUT吗?什么不起作用?我给了你两个建议和两个工作。你读过关于“如何使用方框布局”的Swing教程吗?如果您需要更多帮助,请发布您的SSCCE:最后,我扩展了FlowLayout以使其按我的需要工作,现在有点酷:只扩展宽度:D非常感谢+1。这种变通方法对我也不起作用,但我认为这是因为它的存在有着不同的目的。正如错误报告中所述:“三个垂直对齐选项将是顶部、中心和底部。它将以完全相同的方式布局,但将组件放置在面板的中间或底部”。实际上,此错误报告有一个不同的用途:“请在流程布局中添加一个选项,以便我指定垂直对齐方式。三个垂直对齐选项是“顶部”、“中心”和“底部”。它会以完全相同的方式布局,但会将组件放在面板的中间或底部。”因此,链接的解决方案可以在三个选项中选择组件的垂直放置(FlowLayout总是将它们放在顶部)但如果它们有不同的高度,它们仍然会彼此居中对齐。只是指出。。。