2016-05-04 6 views
0

Ich habe einen Fehler, wo meine Gridx und Gridy von GridBoxConstraints nichts tun. Ich habe mehrere Objekte, die ich hinzufügen möchte und ändere die Positionen von, aber keiner von ihnen ändert sich und bleibt einfach dort, wo ich sie zuerst gelassen habe, als ob ich nie Grix und Gridy benutzt hätte.Gridx und Gridy ändern nichts

public class Applet extends JApplet{ 
private JButton b1; 
private JButton b2; 
private JFrame f; 
private JPanel p; 
private JRadioButton r; 
private JRadioButton r1; 
//private JTextField demoField; 
GridBagConstraints c =new GridBagConstraints(); 


public Applet() 
{ 
    gui(); 
} 
public void gui() 
{ 
    f=new JFrame("Applet!"); 
    f.setVisible(true); 
    f.setSize(500,500); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    p = new JPanel(); 
    p.setVisible(true); 

    //demoField = new JTextField(); 



    r = new JRadioButton("Leave a message!!"); 
    r1 = new JRadioButton("Draw a shape!!"); 

    b1 = new JButton("Button!"); 
    b1.setVisible(true); 
    b2 = new JButton("Button 2!"); 
    b2.setVisible(true); 
    r1.setVisible(true); 
    r.setVisible(true); 
    //setting grid numbers 
    c.gridx=0; 
    c.gridy = 0; 
    //adding to frame 
    p.add(b2,c); 
    //setting grid numbers 
    c.gridx = 5; 
    c.gridy = 2; 
    p.add(r1,c); 
    //setting grid numbers 
    c.gridx = 5; 
    c.gridy = 5; 

    p.add(r,c); 
    //setting grid numbers 
    c.gridx = 0; 
    c.gridy = 0; 
    p.add(b1,c); 

    //p.add(demoField); 
    f.add(p); 

} 

Antwort

0

Für gridx und gridy sinnvoll zu nutzen, müssen Sie auch gridwidth und gridheight verwenden. In einer GridBagLayout haben die Zellen (und folglich Zeilen und Spalten) des Gitters keine feste Größe, sondern fragen die bevorzugten Größen ihrer Inhalte ab und geben ihnen dann zusätzlichen Platz, wie durch ihre Gewichte bestimmt (ein weiterer Einschränkungsparameter - wie immer) Einzelheiten finden Sie unter fine documentation.

Auch wenn es OK ist, ein GridBagConstraints für mehrere Objekte wiederzuverwenden, ist es verwirrend, es vor der Wiederverwendung zu ändern, ohne alle Felder zurückzusetzen (einige sind standardmäßig auf Null gesetzt). Am einfachsten ist es, ein anderes Constraint-Objekt für die nächste untergeordnete Komponente zu erstellen, falls sie sich unterscheiden.

So:

b1 = new JButton("Button!"); 
b1.setVisible(true); 
b2 = new JButton("Button 2!"); 
b2.setVisible(true); 
r1.setVisible(true); 
r.setVisible(true); 
//setting grid numbers 
c.gridx = 0; 
c.gridy = 0; 
c.gridwidth = 5; 
c.gridheight = 2; 

//adding to frame 
p.add(b2,c); 
c = new GridBagConstraints(); 
//setting grid numbers 
c.gridx = 5; 
c.gridy = 2; 
p.add(r1,c); 
.... 

und so weiter. Das Layout von ist sehr komplex, und wenn man von Ihrem Beispiel ausgeht, möchten Sie vielleicht etwas völlig anderes: Wenn Sie ein Raster mit fester Größe erwarten und wollen, dass im Raster Raster und Zeilen "übersprungen" werden Spalten, verwenden Sie GridLayout, nicht GridBagLayout.