2013-03-24 72 views
-1

我有一個JFrame表示想是這樣的: enter image description hereGUI通過手工編碼

這裏是我的代碼,但顯示全屏按鈕!

public class editFrame extends JFrame { 

JButton saveButton; 
JButton cancelButton; 

public editFrame() { 
    Component add = this.add(createForm()); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setBounds(100, 50, 500, 600); 
    this.setVisible(true); 
} 

public JPanel createForm() { 
    String[] labels = {"ID", "Name", "Date", "Borrow Status"}; 
    // Create and populate jpanel 
    JPanel panel = new JPanel(); 
    for (int i = 0; i < 4; i++) { 
     JLabel l = new JLabel(labels[i], JLabel.TRAILING); 
     panel.add(l); 
     JTextField textField = new JTextField(10); 
     l.setLabelFor(textField); 
     panel.add(textField); 
    } 
    SpringLayout sL = new SpringLayout(); 
    panel.setLayout(sL); 
    SpringUtilities.makeCompactGrid(panel, 4, 2, 6, 6, 6, 6); 

    return panel; 
} 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      editFrame edF = new editFrame(); 
     } 
    }); 
} 
} 

我試圖用彈簧的佈局,但現在是: enter image description here

所有JTextField的情況都這麼大了!

+0

'我可以使用Spring Layout嗎?'您不僅限於一個佈局管理器。您可以創建多個面板,其中每個面板都有不同的佈局。 – camickr 2013-03-24 21:14:24

+0

@camickr更新我的代碼,但現在我的JTextField都這麼大了...... – Sajad 2013-03-24 21:17:18

+0

我添加了一個答案,以解決上述問題。 – camickr 2013-03-24 21:58:23

回答

3

所有JTextField的情況都這麼大了!

那是因爲SpringLayout會根據可用空間調整字段的大小。

如果你不希望他們的高度,你可以做成長:

//Component add = this.add(createForm()); 
Component add = this.add(createForm(), BorderLayout.NORTH); 

或者,如果你不希望他們在寬度或高度成長你可以用在面板的面板使用FlowLayout,因爲這將尊重部件的首選尺寸:

//Component add = this.add(createForm()); 
JPanel wrapper = new JPanel(); 
wrapper.add(createForm()) ; 
add(wrapper); 
+0

謝謝你camickr ... – Sajad 2013-03-25 12:01:48

+0

你的第一個陳述運行時有錯誤... – Sajad 2013-03-25 12:34:58

6

退房佈局管理器教程和API。在那裏您會看到JFrame的contentPane默認使用BorderLayout。當您使用容器將組件添加到BorderLayout而不指定佈局常量時,它會添加BorderLayout.CENTER,佔用整個空間並覆蓋之前添加的任何內容。解決方案是查看佈局管理器教程,然後開始播放各種佈局。請注意,您通常會嵌套JPanel,每個JPanel都使用其自己的佈局以簡單的方式實現複雜的GUI。

+3

@Sajjad:關於''「你能展示正確的代碼嗎?」 - 啊,爲什麼會破壞你和佈局管理者一起玩並且試驗你的代碼的樂趣?你會從這個練習中學到更多東西,而不是我們用勺子餵你的代碼。但請回來,並顯示你的代碼,如果嘗試後它仍然不符合你的喜好。 – 2013-03-24 20:38:22

+0

我應該使用哪個佈局管理器? – Sajad 2013-03-24 20:41:46

+0

完全取決於您的需求以及您希望GUI的外觀。我建議您的特定情況下的網格佈局。 – SevenBits 2013-03-24 20:45:05

0

肯定 - 使用GUI構建器做GUI。你會花更少的時間來投資開發算法。對於Eclipse,有WindowBuilder Pro,NetBeanIDE包含GUI構建器。

+2

沒有經驗,而且你不會明白的佈局或Swing庫的雛形。我強烈反對這條路線,特別是在學習Swing時。在你理解了之後,當然,如果需要的話,繼續使用它們,但是在這之前這樣做會妨礙你獲得對圖書館的理解。 – 2013-03-25 00:45:06