2010-02-22 58 views
4

可以解釋對象有人可以解釋爲什麼在這裏縮進文本「Options」?這在BoxLayout中看起來像一個bug。 TIA爲什麼使用Swing BoxLayout

import javax.swing.*; 
import java.awt.*; 

public class BoxLayoutIssue { 

    public static void main(String[] args) { 

     JFrame f = new JFrame(); 
     f.setSize(240, 250); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

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

     JLabel label = new JLabel("Option"); 
     panel.add(label); 

     JLabel a = new JLabel("A"); 
     JLabel b = new JLabel("B"); 
     JLabel c = new JLabel("C"); 
     JLabel d = new JLabel("D"); 
     JLabel e = new JLabel("E"); 

     Box box = Box.createVerticalBox(); 
     box.add(a); 
     box.add(b); 
     box.add(c); 
     box.add(d); 
     box.add(e); 

     JScrollPane jscrlpBox = new JScrollPane(box); 
     jscrlpBox.setPreferredSize(new Dimension(140, 90)); 
     panel.add(jscrlpBox); 

     f.add(panel); 

     f.setVisible(true); 
    } 
} 
+0

與您的問題無關 - 您應該在AWT事件線程中執行此操作。請參閱SwingUtilities.invokeLater(Runnable)。 – 2010-02-22 01:20:01

+0

也許。 :)我只是一起鞭打這件事來解釋我遇到的問題。 – sproketboy 2010-02-23 10:07:56

回答

4

這裏的問題在於JLabel將其右側邊緣與面板的中心對齊,而滾動窗格則將其中心與面板中心對齊。

我能夠加入兩行解決這個問題,既labeljscrlpBox的水平對齊方式設置爲Component.LEFT_ALIGNMENT

JLabel label = new JLabel("Option"); 
label.setAlignmentX(Component.LEFT_ALIGNMENT); // Added 

panel.add(label); 

JLabel a = new JLabel("A"); 
JLabel b = new JLabel("B"); 
JLabel c = new JLabel("C"); 
JLabel d = new JLabel("D"); 
JLabel e = new JLabel("E"); 

Box box = Box.createVerticalBox(); 
box.add(a); 
box.add(b); 
box.add(c); 
box.add(d); 
box.add(e); 

JScrollPane jscrlpBox = new JScrollPane(box); 
jscrlpBox.setPreferredSize(new Dimension(140, 90)); 
panel.add(jscrlpBox); 
jscrlpBox.setAlignmentX(Component.LEFT_ALIGNMENT); // Added 

在一般情況下,故障排除這樣的事情的時候,我嘗試添加一個顏色鮮豔的線邊界到組件(在這種情況下,label),這些不是我想要它們的地方。那時候我意識到它正在用與另一個組件用於排列其中心的線相同的線來排列它的右邊緣。

+0

謝謝。這是一個很好的提示。 – sproketboy 2010-02-22 01:10:39

2

閱讀Swing教程中關於Using a Box Layout的部分。有一些例子試圖解釋每個組件的「X對齊」如何影響佈局。

如果您描述了您正在嘗試做什麼,或者您期望發生什麼,也許我們可以建議使用不同的佈局管理器組合。

+0

是的謝謝。我會再讀一遍。看起來左對齊會默認發生。 :) – sproketboy 2010-02-22 01:12:10

+0

你當然不是第一個假設的人。如果每種類型的組件都默認具有*相同的*對齊方式,也可能會更好,但即便如此,情況也不例外。 – 2010-02-22 01:24:39

+0

是的,謝謝。我可能會創建組件的子類來設置我想要的所有默認值。 – sproketboy 2010-02-23 10:09:38