Frage

Mein aktuelles Problem ist, dass ich ein JFrame mit einem 2x2 Gridlayout haben. Und in einer der Plätze, habe ich eine JPanel, die ein Raster angezeigt ist. Ich bin ein Feld Tag mit der Java-Swing-Bibliothek mit ... werfen Sie einen Blick

Bild

Java wird automatisch bei jedem JLabel erweitert den Bildschirm passen. Ich will es sein, nur jene blauen Quadraten (Wasser) und der schwarze Rand und nicht grau Raum. Gibt es eine Weise, die ich nur die Größe, dass einstellen JPanel permanent so, dass ich auf die Größe des JFrame eine Million Mal, bevor ich die genaue Dimension nicht durchgehen zu ändern bekommen, so dass der graue Raum verschwindet?

Ich möchte auch die Größe dieser Tasten setzen, damit sie nicht so groß sind (BorderLayout für die Schaltflächen und Textfield verwendet wird)

War es hilfreich?

Lösung

Wenn Sie die beiden Schachbretter wollen die gleiche Größe bleiben, dann müssen Sie sie jeweils enthalten sind, haben in ihrem eigenen JPanel. Legen Sie jede dieser Elternteil JPanel der ein Layout Art von GridBagLayout zu haben. Stellen Sie die preferedSize für jede Schachbrett-Komponente und dann fügen Sie sie in ihre jeweiligen Behälter. GridBagLayout sollte standardmäßig legte jedes Brett aus in der Mitte der Mutter JPanel. So wie die Fenstergröße verändert wird, wird der JPanel Mutterbereich größer oder kleiner werden, aber die schachbrett Komponenten im Innern werden die gleiche Größe bleiben.

Alternativ können Sie Ihre blauen Quadrate haben auf die richtige Größe skaliert, wenn das Fenster, indem jeden Schachbrett quadratisch ein JPanel mit einem BorderLayout Layout-Manager und das Hinzufügen des JLabel (mit einem blauen Hintergrundfarbe) zu seiner BorderLayout.CENTER Lage der Größe verändert wird.

Wie für Ihre Knöpfe, versuchen, etwas wie folgt aus:

JPanel theButtonPanel = new JPanel(new BorderLayout());
JButton button1 = new JButton("Fire");
JButton button2 = new JButton("Pass");
JButton button3 = new JButton("Forfiet");

JPanel innerButtonContainer = new JPanel(new Grid(1, 3, 8, 8));
innerButtonContainer.add(button1);
innerButtonContainer.add(button2);
innerButtonContainer.add(button3);

theButtonPanel.add(innterButtonContainer);

Schließlich betrachten ein Design-Tool für Ihren Swing-Benutzeroberfläche verwenden. Netbeans hat ein ausgezeichnetes UI Designer hinein gebaut. Herunterladen Netbeans hier .

Andere Tipps

GridBagLayout ist das, was Sie auch wirklich nutzen wollen. Das Gridlayout wird die gleiche Größe für jede Komponente im Layout erzwingen, egal welche Größe Einschränkungen, die Sie auf sie setzen. GridBagLayout ist viel stärker und viel komplizierter. Studie bis auf der API dafür. Mit GridBagLayout werden die Komponenten füllen nicht den ganzen Gitterraum, wenn Sie wollen, dass sie nicht zu und können sogar die Größe bleiben, dass Sie es fragen zu sein. Um eine Komponente der Größe zu halten ändert, würde ich alle drei verfügbaren Größenbeschränkungen festgelegt:

water.setPreferredSize(new Dimension(20, 20));
water.setMinimumSize(new Dimension(20, 20));
water.setMaximumSize(new Dimension(20, 20));

Für Ihre Tasten, ich würde auf jeden Fall eine innere Panel: Bryan erwähnt. Sie könnten entweder ein Gridlayout verwenden, wie er vorschlägt oder ein Flowlayout, wenn Sie nicht alle wollen die Tasten die gleiche Größe sein. Fügen Sie alle Ihre Tasten zu dieser inneren Platte anstelle des Haupt ein.

Wenn Sie auf der obersten Ebene Frame setResizeable( false ) können Sie dann Ihr Layout-Manager gesetzt und hart Code über setBounds jede Position und Größe auf null. Dies ist, wie ich es tun würde (abhängig von Größe ändert natürlich).

Ich habe Erfolg der Lösung von Problemen wie diese mit TableLayout hatte, die von einem fremden Layout-Manager ist. Sie werden es herunterladen müssen und das Tutorial zu lesen, aber der Schlüssel wäre die Begründung CENTER zu setzen, wenn die JButtons, um ihre Positionen im Layout hinzufügen.

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