2012-12-13 9 views
8

Ich versuche zu lernen, wie man JAVA-Programme erstellen und ich arbeite mit Swing. Ich versuche, eine Schaltfläche in der oberen linken Ecke des Fensters zu platzieren, und es geht weiter zur oberen Mitte.Platzieren von Schaltflächen an einem bestimmten Ort mit Swing in Java

public void createGUI(){ 
    JFrame frame = new JFrame("My Project"); 
    frame.setDefaultCloseOperation(3); 
    frame.setSize(400, 350); 
    frame.setVisible(true); 

    JPanel panel = new JPanel(); 

    frame.add(panel); 

    addButtonGUI(panel, new JButton(), "test", 1, 1); 
} 

public void addButtonGUI(JPanel panel, JButton button, String text, int x, int y){ 
    GridBagConstraints gbc = new GridBagConstraints(); 
    button.setText(text); 
    button.setEnabled(true); 
    gbc.gridx = x; 
    gbc.gridy = y; 
    gbc.gridwidth = 2; 
    gbc.weightx = 1.0D; 
    gbc.fill = 2; 
    panel.add(button, gbc); 
} 

Was mache ich falsch oder gibt es einen besseren Weg, dies zu tun? Bitte helfen

+1

'frame.setDefaultCloseOperation (3);' Verwenden Sie keine magischen Zahlen. Der J2SE hat Konstanten für diese Werte deskriptiv benannt. –

Antwort

2

statt

addButtonGUI(panel, new JButton(), "test", 1, 1); 
} 

, was passieren würde, wenn Sie

verwendet
addButtonGUI(panel, new JButton(), "test", 0, 0); 
} 
7

Sie müssen das Layout der JPanel-GridBagLayout einstellen verwenden GridBagConstraints:

JPanel panel = new JPanel(new GridBagLayout()); 

Auch wie Sie nur haben Für eine effektive "Zelle" müssen Sie einen Anker verwenden und weighty für die JButton setzen, um die Bewegung in der Y-Achse zu ermöglichen.

gbc.anchor = GridBagConstraints.NORTHWEST; 
gbc.weighty = 1.0; 

Auch würde ich die fill Einstellung NONE gesetzt:

gbc.fill = GridBagConstraints.NONE; 

, so dass die Taste, um die volle Breite der Platte nicht besetzen ist. (2 = HORIZONTAL füllen).