2011-06-06 31 views
4

我有以下代碼:如何正確對齊JLabel中的文本?

JPanel panel = new JPanel(); 
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

for(int xx =0; xx < 3; xx++) 
{ 
    JLabel label = new JLabel("String"); 
    label.setPreferredSize(new Dimension(300,15)); 
    label.setHorizontalAlignment(JLabel.RIGHT); 

    panel.add(label); 
} 

這是我想的文本看:

[       String] 
[       String] 
[       String] 

這是它的外觀

[String] 
[String] 
[String] 

出於某種原因,標籤沒有按沒有設置爲我指定的首選尺寸,我認爲這是因爲它不能對齊我的標籤文本。但我不知道。任何幫助,將不勝感激。

+2

看一看這個例子 - http://www.java2s.com/Code/Java/Swing-JFC/AsimpledemonstrationoftextalignmentinJLabels.htm – mre 2011-06-06 19:52:58

回答

5

setPreferredSize/MinimumSize/MaximumSize方法依賴於父組件的佈局管理器(在本例中爲panel)。

首先嚐試setMaximumSize而不是setPreferredSize,如果我不會出錯應該使用BoxLayout。

此外:也許你有使用和玩膠水:

panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); 
panel.add(Box.createHorizontalGlue()); 
panel.add(label); 
panel.add(Box.createHorizontalGlue()); 

如果你需要Y_AXIS BoxLayout的,你也可以使用嵌套面板:

verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));  
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); 
panel.add(Box.createHorizontalGlue()); 
panel.add(label); 
panel.add(Box.createHorizontalGlue()); 
verticalPanel.add(panel); 
+0

謝謝你的代碼,我沒有」不知道膠水的問題。 – Grammin 2011-06-06 20:14:17

+0

by匿名upvoter,真的很好描述+1 – mKorbel 2011-06-06 21:22:17

+0

第二個片段導致「BoxLayout無法共享」異常。應該是verticalPanel.setLayout(新的BoxLayout(verticalPanel,BoxLayout.Y_AXIS)); – ka3ak 2012-08-08 16:19:37

5

我認爲這取決於您在XY中使用的佈局(我記得是JBuilder中的某種佈局),它應該可以工作,但在其他情況下可能會出現問題。嘗試將最小大小更改爲首選大小。

2

您需要確保您的LayoutManager正在調整標籤以填充目標區域。您可能有一個JLabel組件,其尺寸與文本的長度完全一致,並且在佈局中左對齊。

0

與你們我能夠確定的BoxLayout不支持,我想文本對齊方式的答覆,所以我把它改成

JPanel panel = new JPanel(); 
panel.setLayout(new GridLayout(3,1,0,0); 

,一切工作正常。

+0

是的,它的確如此。可能你需要使用BoxLayout.Y_AXIS來達到這個效果。 – Heisenbug 2011-06-06 20:01:38

+0

@Overbose你能否詳細說明一下?我在示例代碼中使用BoxLayout.Y_AXIS。 – Grammin 2011-06-06 20:07:06

+0

看看我的帖子。我編輯過。 – Heisenbug 2011-06-06 20:07:40

2
myLabel#setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); 
+0

這裏的問題不是對齊本身。問題是JLabel沒有預期的大小,所以對齊效果不可見。 – Heisenbug 2011-06-06 20:11:05

+0

@ 0verbose BoxLayout接受了PreferredSize,如果空間是共享的,但是您是誰告訴Container中的所有JComponets必須可見 – mKorbel 2011-06-06 20:19:36

3

這有點煩人,但是如果您希望在對齊方面比網格佈局更靈活,那麼您可以對盒子佈局使用嵌套的JPanel。

JPanel panel = new JPanel(); 
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 


    for (int xx = 0; xx < 3; xx++) { 
     JPanel temp = new JPanel(); 
     temp.setLayout(new BoxLayout(temp,BoxLayout.LINE_AXIS)); 

     JLabel label = new JLabel("String"); 
     temp.add(Box.createHorizontalGlue()); 

     temp.add(label); 
     panel.add(temp); 
    } 

我用膠水水平,以保持它在正確的事無大小,但你可以把剛性的區域,使之成爲特定的距離。

1

,而不是使用

label.setHorizontalAlignment(JLabel.RIGHT); 

使用

label.setHorizontalAlignment(SwingConstants.RIGHT); 

這樣你:

JPanel panel = new JPanel(); 
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
for(int xx =0; xx < 3; xx++) 
{ 
    JLabel label = new JLabel("String"); 
    label.setPreferredSize(new Dimension(300,15)); 
    label.setHorizontalAlignment(SwingConstants.RIGHT); 
    panel.add(label); 
} 
1

無法使用以下?

Jlabel label = new JLabel("String"); 
label.setBounds(x, y, width, height); // <-- Note the different method used. 
label.setHorizontalAlignment(JLabel.RIGHT); 

此工作至少在JFrame容器內。不確定關於JPanel