2013-01-08 339 views
0

我有一個JPanel內部的所有對象採用JTextField大小的異常問題。即使我試圖強制其他對象的大小,他們仍然將文本字段指定的大小視爲自己的大小。例如,我試圖建立一個單一的面板在它自己的方法如下:Java Swing JPanel對象大小全部匹配JTextField大小

private JPanel setupID() { 
    JLabel projLbl = new JLabel("Project ID:"); 
    JButton verifyBtn = new JButton("Verify ID"); 
    projID = new JTextField(25); 
    verifyBtn.setToolTipText("Verifies that the entered ID is not already in use."); 
    JPanel theID = new JPanel(new GridLayout(1,0)); 
     theID.add(projLbl); 
     theID.add(projID); 
     theID.add(verifyBtn); 
    return theID; 
} 

什麼我最終是看起來像這樣的窗口...... enter image description hereJFrame frame;,這是正裝成爲具有調用它的frame.pack()方法來自動調整幀大小。如果我在不同區域(例如WEST,CENTER,EAST)的BorderLayout()中創建單個對象,它們將按預期工作,但是當它們加載到面板中時,它們的大小均基於JTextField(25)。任何想法,爲什麼這是?

+1

這是GridLayout的行爲。如果您想要更多地控制GUI中每個組件的大小,則需要選擇其他LayoutManager。要快速查看標準佈局管理器之間的差異,請選中[此處](http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)。 –

+0

@代碼大師你真的需要做出答案並添加一個例子! – MadProgrammer

+0

感謝鏈接代碼大師,這有助於描述不同的佈局類型。 – DGolberg

回答

2

正如Code-Guru和asemax指出的那樣。看起來您正在使用GridLayout,該設計旨在使用可用空間平均佈置網格中的組件。

嘗試使用有點像GridBagLayout,而不是...

enter image description here

public class BadLayout08 { 

    public static void main(String[] args) { 
     new BadLayout08(); 
    } 

    public BadLayout08() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      add(new JLabel("Project ID:")); 
      add(new JTextField(25)); 
      add(new JButton("Verify ID")); 
     } 

    } 

} 

當你需要對要使用的佈局決定你可能會發現一些使用A Visual Guide to Layout Managers

+0

這樣做。我想我需要多花一點時間看看不同的佈局。我仍然在嘗試學習java,swing和AWS API,同時創建工作程序。計劃是現在創建粗略的工作版本,然後在我學會了如何正確**編寫有問題的程序後,返回並優化代碼。啊,在沒有訓練的情況下學習工作的樂趣...再次感謝您的幫助! – DGolberg

2

從Java的documentation報價:

的網格佈局類是勾畫出一個容器的組件矩形網格佈局管理器。容器被分成相等大小的矩形,並且一個部件放置在每個矩形[...]

我的猜測是矩形大小是基於所述最大組件的首選大小。 您應該使用替代佈局,也許GridBagLayout更適合您的需求。