2016-11-30 59 views
1

我在布局上很漂亮......我的应用程序我想在左下角放置一个面板,使用填充,但我不确定要使用哪个布局。在角落定位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

实现此布局的任何提示?这看起来相当简单,但我又是新手布局

+0

此帧只有JLabel吗?对于刚进入Swing的人,我推荐GridBagLayout。这是我个人最喜欢的布局,但主要是偏好。 – KyleKW

+0

你使用'GridBagLayout'工作吗? – ItamarG3

+0

我觉得我有点被GridBagLayout吓倒了,所以我实际上是为了SpringLayout的建议而发布的。它似乎很好地工作,除了底部填充的东西有点奇怪。我认为SpringLayout将很容易用于添加额外的功能。最终产品的格式可能与此图像相似:http://puu.sh/szyi3/0a6da303f5.png –

回答

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); 

春天布局允许您设置组件的侧面和框架之间的距离,并最终设置它的位置在一个动态的方式(当调整位置将保持相对帧)

这是输出:

output

+0

我正在尝试SpringLayout。但是,我无法使底部填充显示。我注意到你使用了负值,因为我们希望标签出现在中心的上方(相对而言,从底部开始是负的y值),对吧?出于某种原因,我必须将填充值增加三倍,才能在标签和屏幕底部之间看到任何空间。任何线索可能导致什么? –

+0

@JoeBalin你是什么意思?你可以发表评论,并附上一张图片的链接,显示你运行代码时会发生什么? – ItamarG3

+0

下面是一段屏幕截图,其中显示了代码段以及带有三个填充(-60)和普通(-20)的结果的屏幕截图。 http://puu.sh/szyve/fe138e15e4.png –

0

您可以使用null布局来自定义您的JFrame。与

yourFrame.setLayout(null) 

可以

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

我不推荐使用setLocation(x,y)来将对象放置在Swing中。 – KyleKW

+0

我在Java中稍微有点新,所以你可以请我解释一下,为什么你不会推荐使用setLocation(x,y)? @KyleKW。 – Helvijs

+1

布局管理器经常被使用,因为它们处理屏幕尺寸变化和改变框架/面板尺寸的复杂性。使用空布局可能会导致您遇到问题,如果这些变量发生变化,您很可能不得不更改这些位置。 看看这个链接[这里](http://stackoverflow.com/questions/6592468/why-is-it-frowned-upon-to-use-a-null-layout-in-swing)。最重要的答案会给你更多的细节。 – KyleKW

2

有2种方式,我建议:

  1. 你可以使用GridBagLayout来实现你想要的。查看教程here。 它足够灵活,可以为您提供所需的任何附加组件。

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