2012-12-13 26 views
8

Próbuję nauczyć się tworzyć programy JAVA i pracuję z Swingiem. Próbuję umieścić przycisk w lewym górnym rogu okna i cały czas przechodzę do jego środka.Umieszczanie przycisków w określonej lokalizacji przy użyciu funkcji swing w języku 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); 
} 

Co robię źle lub czy jest lepszy sposób to zrobić? Proszę o pomoc

+1

'frame.setDefaultCloseOperation (3);' Nie używaj magicznych liczb. J2SE ma opisowe nazwy stałych dla tych wartości. –

Odpowiedz

2

zamiast

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

co by się stało, jeśli użyto

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

Musisz ustawić układ JPanel do GridBagLayout używać GridBagConstraints:

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

Również jak tylko masz jedna skuteczna "komórka", musisz użyć kotwicy i ustawić weighty dla , aby umożliwić ruch na osi Y.

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

Również chciałbym wybrać ustawienie fill do NONE:

gbc.fill = GridBagConstraints.NONE; 

tak, że przycisk nie zajmuje całą szerokość panelu. (2 = HORIZONTAL wypełnienie).