将JLabel定位在角落里

时间:2016-11-30 15:45:09

标签: java user-interface jframe jpanel jlabel

我对布局很不错...对于我的应用程序我想在左下角放置一个面板,使用填充,但我不确定要使用哪种布局。

我尝试使用BorderLayout和水平对齐,以便将面板定位在角落,但它没有产生预期的结果。我的代码如下:

final JLabel label = new JLabel();
label.setBorder(new EmptyBorder(20, 20, 20, 20));
label.setHorizontalAlignment(JLabel.LEFT);
label.setPreferredSize(new Dimension(100,100));
label.setBackground(Color.WHITE);
label.setOpaque(true);
add(label, BorderLayout.SOUTH);

(外部类扩展了JFrame)

下面的图片详细说明了我想要的内容以及我拥有的内容。 what I want vs what I have

实现此布局的任何提示?这似乎很简单,但同样,我是布局

的新手

3 个答案:

答案 0 :(得分:2)

我推荐两种方式:

  1. 您可以使用GridBagLayout来达到您想要的效果。查看教程here。 它足够灵活,可以满足您的需求和任何其他附加组件。

  2. 使用具有不同布局的嵌套面板。例如,topPanel和bottomPanel。默认情况下(FlowLayout将用于您的bottomPanel),它将JLabel定位在左下角。

答案 1 :(得分:1)

您可以使用SpringLayout

这很棘手,但它会起作用。

SpringLayout springLayout = new SpringLayout();
Container cont = getContentPane();
cont.setLayout(springLayout);

JLabel label = new JLabel("New label");
springLayout.putConstraint(SpringLayout.WEST, label, 20, SpringLayout.WEST, cont);
springLayout.putConstraint(SpringLayout.SOUTH, label, -10, SpringLayout.SOUTH, cont);
cont.add(lblNewLabel);

Spring Layout允许您设置组件两侧和框架之间的距离,并最终以动态方式设置它的位置(调整大小时该位置将保持相对于框架)

这是输出:

output

答案 2 :(得分:0)

您可以使用null Layout来自定义JFrame。与

 yourFrame.setLayout(null) 

你可以

 setLocation(x,y);
 setsize(width,height);