BoxLayout忽略setYAlighment

时间:2013-09-11 15:11:38

标签: java swing layout alignment boxlayout

这是一个功能:

/**
 * Creates an instance of a JLabel with the given arguments
 * @param text The text to be displayed on the Label
 * @param font The font of the label
 * @param bold set to true if you want the label's text to be bold
 * @param fontSize The size of the font to be rendered
 * @param alignment An alignment (E.g. CENTER_ALIGNMENT)
 * @param verticleAlignment an optional argument to allow one to choose the Y alignment
 * **/
public JLabel createLabel(String text, String font, boolean bold, int fontSize, float alignment, float...verticleAlignment){
    JLabel label = new JLabel(text);
    label.setFont(new Font(font, bold ? Font.BOLD : Font.PLAIN, fontSize));


    label.setAlignmentX(alignment);
    if(verticleAlignment.length > 0){
        label.setAlignmentY(verticleAlignment[0]);
    }
    return label;
}

出于某种原因,无论我在varArg verticleAlignment中输入什么,它实际上都不适用?

add(createLabel("ChatBytes™ - Do not steal.", "Arial", false, 12, CENTER_ALIGNMENT, BOTTOM_ALIGNMENT));

任何人都可以看到它忽略我的函数的setYAlignment部分的原因吗?

This is how it renders

2 个答案:

答案 0 :(得分:5)

作为替代方案,请考虑nested layout。在下面的示例中,相关标签会添加到SOUTH的{​​{1}}区域,BorderLayout的默认区域,并且您的登录面板的占位符会添加到JFrame 。检查每种方法的调整大小行为是否合适。

附录:我希望[学习] CENTER 被忽略的原因。

正如How to Use BoxLayout: Box Layout Features中所述,“当setAlignmentY()从上到下排列组件时,...容器底部会出现任何额外空间。”这解释了您原来的observation并更正了solution

在API中,请注意setAlignmentX()“设置垂直对齐方式”和setAlignmentY()“设置水平对齐方式。”在此上下文中, vertical 表示从上到下布局的垂直轴,例如BoxLayout,而水平表示左侧的水平轴 - 右侧布局,例如BoxLayout.Y_AXIS。在How to Use BoxLayout: Fixing Alignment Problems中,BoxAlignmentDemo将两者进行对比。在从左到右的布局中,如下图所示,BoxLayout.X_AXIS用于调整相对于水平布局轴的垂直定位。在自上而下的布局中,setAlignmentY()根本没有效果。

setAlignmentY


image

setAlignmentY()

答案 1 :(得分:3)

使用

    add(Box.createVerticalGlue());

创建一个垂直空间,将组件推送到JFrame的底部