2012-07-31 79 views
1

我有一個JPanel(panel),它的佈局設置爲BoxLayout。我還有一個自定義類MapRow,它擴展了JPanel(並在其中包含一些簡單的FlowLayout中的組件),並且我希望以簡單的左對齊的自頂向下的方式將MapRow的實例添加到panel。請看下面的方法:swing:在一個BoxLayout中對齊JPanels

public void drawMappingsPanel(JPanel panel) { 
     panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); 

     int s = /* aMethodCall() */; 
     for (int i = 0; i < s; i++) { 
      MapRow row = new MapRow(); 
      row.setAlignmentX(LEFT_ALIGNMENT); 
      panel.add(row); 
     } 
    } 

然而,當我運行的代碼,所有MapRow面板中心對齊,如下圖所示:

enter image description here

我該如何調整的MapRow面板的左側?該setAlignmentX(LEFT_ALIGNMENT)方法似乎不工作...

編輯:我剛剛更換的MapRow實例與虛擬JButton s,而他們得到了左對齊無一不精。所以像JButton這樣的組件可以使用setAlignmentX()左對齊,但JPanels不能?

+0

發佈完整的代碼,從而使他人能夠幫助你 – sunil 2012-07-31 07:37:32

+0

使用不同佈局的管理,如[MigLayout(http://www.miglayout.com) – 2012-07-31 07:39:56

+2

@sunil不是完整的代碼請......只是一個[SSCCE](http://www.sscce.org)。 – 2012-07-31 07:41:42

回答

1

你應該在MapRow中爲你使用一個左對齊的FlowLayout。這裏是一個小SSCCE說明的是:

import java.awt.Color; 
import java.awt.FlowLayout; 

import javax.swing.BorderFactory; 
import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class TestJPanels { 

    protected void initUI() { 
     final JFrame frame = new JFrame(TestJPanels.class.getSimpleName()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); 
     for (int i = 0; i < 5; i++) { 
      JLabel label = new JLabel("Label-" + i); 
      label.setBorder(BorderFactory.createLineBorder(Color.GREEN)); 
      JPanel insidePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); 
      insidePanel.add(label); 
      insidePanel.setBorder(BorderFactory.createLineBorder(Color.RED)); 
      panel.add(insidePanel); 
     } 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TestJPanels().initUI(); 
      } 
     }); 
    } 
}