Frage

Wie kann ich einen Knopf Platz nebeneinander machen. Ich benutzte ein GridBagLayout das layout.The Problem zu entwerfen ist, dass die Schaltfläche Ort zu weit voneinander entfernt. Ich habe versucht, das Zentrum als Anker zu wählen, aber das macht die Schaltfläche überlappend. Wenn ich verwendet, West und Ost zu weit auf die Schaltfläche voneinander angeordnet sind.

z. SPAREN ---------- neues Muster anstelle von SAVE NEW_PATTERN.

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=1;
con.gridy=3; con.gridx=0;
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);
War es hilfreich?

Lösung

Danke AKF, habe ich das Problem gelöst, indem das Flowlayout innerhalb des GridBagLayout platzieren.

....
JButton bSave = new JButton("Save");
JButton bPattern = new JButton("New Pattern");
JPanel pContainer = new JPanel();
pContainer.setLayout(new FlowLayout(FlowLayout.CENTER));
pContainer.add(bSave); pContainer.add(bPattern); 
con = new GridBagConstraints();
con.anchor=GridBagConstraints.CENTER;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
m.setConstraints(pContainer, con);
c.add(pContainer);
....

Andere Tipps

GridBagLayout ist der komplizierteste von Layouts. Wenn Sie nur ein paar Tasten ausrichten, würde ich mit Flowlayout (Standard) oder BoxLayout empfehlen. Aber, wenn Sie GridBagLayout verwenden möchten, anstatt den Anker einzustellen, stellen die gridx 1 für die zweite Taste sein. Auch nicht sicher, warum Sie eine gridy von 3 statt gridy von 0 (es sei denn es andere Code haben Sie ausgelassen, dass Verwendungen gridy von 0-2).

Warum gehst du nicht liest Ihre alte Nachrichten zuerst, bevor neue Fragen veröffentlichen?

Sie, wo Sie einen Link zu den Swing-Tutorial in Ihrem letzten Beitrag gegeben. Also das Tutorial lesen, versuchen Sie die Beispiele aus und verwenden Sie den entsprechenden Layout-Manager oder die Kombination von Layout-Manager für den Job.

Statt GridBagLayout, GridLayout ist eine einfache Lösung. Es ist einfach einzurichten:

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
JPanel panel = new JPanel(new GridLayout(1,2); // 1 row, 2 cols
panel.add(bSave);
panel.add(bPattern);

EDIT:

Nur aus Neugier, ich war Herumalbern mit Ihrem ursprünglichen und fand eine Kombination, die für die Verwendung von nur der GridBagLayout ermöglicht. Es ist nicht viel anders als die ursprüngliche:

GridBagConstraints con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3;
con.gridx = 0;                   
con.gridwidth = 1; 
con.gridheight = 1;          
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=0;
con.gridy=3;
con.gridx=1;//this is the big diff!
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);

Dieser Code situieren die Tasten nebeneinander in der Mitte des Bildschirms.

Der Schlüssel ist:

constraints.fill = GridBagConstraints.NONE; -> die butons machen nicht

constraints.insets.right = 0; -> macht die Tasten stehen nebeneinander

constraints.insets.left = 0; -> macht die Tasten stehen nebeneinander

constraints.weightx = 1 -> macht die Zelle in Weichen die Tasten sind expando horizontal

constraints.anchor = GridBagConstraints.EAST; -> macht die linke Taste an der der Zelle stehen

constraints.anchor = GridBagConstraints.WEST; -> macht die rechte Taste auf der linken Seite der Zelle

public static void main(String args[]){
        JFrame frame=new JFrame();
        Container cont=frame.getContentPane();
        cont.setLayout(new GridBagLayout());

        GridBagConstraints constraints=new GridBagConstraints();
        constraints.insets.top=2;
        constraints.insets.bottom=2;
        constraints.insets.left=0;// increment to separate buttons
        constraints.insets.right=0;// increment to separate buttons
        constraints.fill=GridBagConstraints.NONE;
        constraints.weightx=1;
        constraints.gridy=0;

        constraints.anchor=GridBagConstraints.EAST;
        constraints.gridx=0;
        cont.add(new JButton("Save"),constraints);

        constraints.anchor=GridBagConstraints.WEST;
        constraints.gridx=1;
        cont.add(new JButton("New Pattern"),constraints);

        frame.pack();
        frame.setVisible(true);
    }

Ich schlage vor, Sie das Tutorial für GridBagLayout lesen, da es den am weitesten fortgeschrittenen Layout-Manager der Box heraus und macht die andere überholt. Es lohnt sich das Lernen aus diesen Gründen. Es macht alles einfach, wenn Sie es als ein Gitter denken und alles, was Sie rechts und dann bekommen haben, ist die x und y-Koordinaten das ist, was Sie in Ihrem Code verpasst. Sie waren fast da:)

Misch Manager-Layout ist in der Regel eine sehr schlechte Idee, da sie alle arbeiten etwas anders, wenn es Behälter mit zusätzlichem Platz zum Ausfüllen kommt.

@camickr Basierend auf meinen Kommentar Leute sollten GridBagLayout verwenden, da es die flexibelste und kann in jeder Situation verwendet werden. nur einen haben, sollten konnte in einfacher und wartbar führen. Ich finde es auch sehr einfach, da es zu lesen logisch abgebildet wird. Die contstraints nur ändern, wenn Sie einen Beschränkung für alle Komponenten-Objekt verwenden, das ist natürlich eine schlechte Idee ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top