2016-11-30 81 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放置在左下角。