FlowLayout的顶部对齐方式

mrp*_*int 11 java layout swing

我正在使用FlowLayout JPanel.当儿童部件高度不同时,面板看起来很丑陋.我正在寻找一种解决方案,使它们顶对齐(类似于valign="top"HTML中的表格单元格).

Asa*_*saf 14

我意识到这个问题是在一年前被问到的,但是和我一样,我认为很多人会偶然发现这个论坛帖子,并试图制作一个像bug报告中建议的那样的解决方法(对我而言只是fyi).

无论哪种方式,自JDK 1.6以来都有更好的答案.Flowlayout具有以下方法:

public void setAlignOnBaseline(boolean alignOnBaseline)
Run Code Online (Sandbox Code Playgroud)

如果在flowlayout上使用此方法并将其设置为true,那么当flowlayout布置组件时,它将检查每个组件的基线并沿该基线对齐组件.

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

有问题的组件必须以这种方式覆盖以下两种方法:

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

@Override
public int getBaseline(int width, int height) {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它们是JComponent中的方法,布局和布局管理器使用这些方法来确定如何布局组件.

如果您采取上述步骤,所有组件将沿着每行的顶部对齐.当然,如果您只是想使用像JButton这样的组件,您显然必须扩展它以实现您期望的目标......但是它不像覆盖layoutcontainer那样需要调试的解决方法.至少我是这么认为的.

祝你好运,-Asaf