2012-12-19 15 views
5

Ich versuche, zwei Schaltflächen für eine Rechner-GUI zu arrangieren. Jeder verwendet ein GroupLayout, um sie zu erstellen. Ein Satz ist die Nummern (und "."), Der andere ist für die Bedienungstasten. Das funktioniert im Grunde, aber wenn einer der Knöpfe doppelte Länge hat (zum Beispiel die Equals-Taste in meinem Operations-Set), wirft er die anderen Knöpfe aus der Reihe. Ich werde die Operationen als Beispiel verwenden. Es gibt zwei Spalten und vier Reihen von Schaltflächen. Die letzte Reihe hat nur einen Knopf - den Gleichen. Ich möchte diese doppelte Länge über beide Spalten strecken. Im Moment schiebt es einfach die zweite Spalte an das Ende, wenn ich möchte, dass die zweite Spalte darauf sitzt.Java - Mischen von Komponentengröße in GroupLayout

Hier ist der Code für das Layout - operLayout ist der Name des Layouts für die Operationen, linke und rechte Klammern in der ersten Zeile, + und - auf der zweiten, * und/auf der dritten und gleich in der letzten Zeile . Jeder Button hat eine minimumSize an anderer Stelle (sie sind alle gleich, außer Equals ist doppelt so lang).

Ich verstehe, warum das passiert, aber ich bin mir nicht sicher, wie es zu sortieren. Gibt es einen einfachen Weg? Oder sollte ich die Art ändern, wie ich es mache? Danke

+0

Ich applaudiere Ihnen für Ihre Wahl von 'GroupLayout' für diese Aufgabe. Ich glaube, dieses Layout ist das leistungsstärkste für das Auslegen von Standardformularen. Es wird leicht übersehen, weil es kompliziert zu verwenden ist. Nachdem ich gelernt habe, wie es funktioniert, benutze ich es fast ausschließlich. –

+0

kann Ihren Code neu formatieren? Aktuell, es ist eher unlesbar. – ArtB

+0

Ja, bitte, tu es, obwohl dich jemand dazu geschlagen haben könnte. Danke @ErickRobertson, ich weiß, was Sie meinen, es scheint kompliziert, aber sobald Sie es verstehen, ist es wirklich nützlich! – PatrickJBC

Antwort

3

Setzen Sie die equals Komponente in eine eigene parallele horizontale Gruppe.

Stellen Sie zuerst sicher, dass Sie konsistent Einzug verwenden, wenn Sie GroupLayout verwenden. Ich habe festgestellt, dass dies absolut wichtig ist, um zu verfolgen, was vor sich geht.

Der Grund dafür, dass Sie das von Ihnen gemeldete Verhalten sehen, liegt darin, dass das Gleichheitszeichen Teil derselben horizontalen parallelen Gruppe wie die erste Spalte der Schaltflächen ist. Wenn Sie es also doppelt breit machen, wird die zweite Spalte der Schaltflächen nach rechts verschoben. Das ist genau das, was Sie ihm sagen, weil Sie ihm sagen, dass er in der ersten parallelen Gruppe (Spalte) bleiben soll.

Um das gewünschte Verhalten zu erhalten, müssen Sie diese Schaltfläche separat parallel zu den anderen Schaltflächen erstellen. Sie tun dies, indem Sie es in eine eigene parallele Gruppe setzen. Sie möchten wahrscheinlich auch eine Ausrichtung auf diese Gruppe setzen, um das beste Verhalten zu erzielen. Ich denke, GroupLayout.Alignment.CENTER ist was du willst.

Beachten Sie auch, dass Sie keine neue Gruppe erstellen müssen, wenn sie nur eine Komponente enthält. Fügen Sie diese Komponente stattdessen hinzu.

operLayout.setVerticalGroup(operLayout.createSequentialGroup() 
    .addGroup(operLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
     .addComponent(leftBracket) 
     .addComponent(rightBracket)) 
    .addGroup(operLayout.createParallelGroup() 
     .addComponent(add) 
     .addComponent(subtract)) 
    .addGroup(operLayout.createParallelGroup() 
     .addComponent(multiply) 
     .addComponent(divide)) 
    .addComponent(equals)); 
operLayout.setHorizontalGroup(operLayout.createParallelGroup() 
    .addGroup(operLayout.createSequentialGroup() 
     .addGroup(operLayout.createParallelGroup() 
      .addComponent(leftBracket) 
      .addComponent(add) 
      .addComponent(multiply)) 
     .addGroup(operLayout.createParallelGroup() 
      .addComponent(rightBracket) 
      .addComponent(subtract) 
      .addComponent(divide))) 
    .addComponent(equals)); 
+0

danke für Ihre Hilfe! Ja, mir ist klar, dass es das war, was ich ihm erzählte, das Ergebnis, das ich bekam, überraschte mich nicht, ich war mir einfach nicht sicher, wie ich es neu anordnen sollte, um es richtig zu machen. Ich verstehe nicht ganz, was Sie sagen, obwohl Sie sagen, es in seine eigene parallele Gruppe (horizontal oder vertikal? Ich würde vertikal oder vielleicht beides?), Aber dann sagen Sie, dass, wenn es eine Komponente ist es nicht Ich brauche eine Gruppe. Ich habe den Code, den Sie gegeben haben, sowie Variationen über das, was Sie gesagt haben, mit Gruppen/nur Komponenten, die Center-Ausrichtung verwenden, aber es gibt keine Änderung an dem, was ich hatte, ausprobiert. – PatrickJBC

+0

okay Entschuldigung, ich habe gerade festgestellt, dass Sie horizontal gesagt haben, damit anzufangen, aber das zu tun, löst das Problem nicht. – PatrickJBC

+0

Ich weiß nicht, warum das nicht das Problem für Sie löst.Stellen Sie sicher, dass Ihre Einrückungen mit Ihren Klammern übereinstimmen, sodass Sie die Komponente der richtigen Gruppe hinzufügen. Es sollte parallel zu der sequenziellen Gruppe hinzugefügt werden, die die zwei Spalten innerhalb der horizontalen Gruppe enthält. Das funktioniert, also bin ich mir nicht sicher, was Sie anders machen. Aber ich würde mich nicht wundern, wenn es aufgrund der Art und Weise, wie der ursprüngliche Code organisiert wurde, an der falschen Stelle ist. –