2017-07-05 3 views
0

Ich habe ein Problem mit einigen Tasten und Panels. Ich habe ein JPanel mit einem GridBagLayout 6x1 erstellt.JButtons in JPanel nehmen zu viel Platz

 GraphicPaintedPanel deck = new GraphicPaintedPanel(); 
     GridBagLayout gblDecks = new GridBagLayout();            
     gblDecks.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0}; 
     gblDecks.rowHeights = new int[]{0, 0}; 
     gblDecks.columnWeights = new double[]{0.15, 0.15, 0.15, 0.15, 0.15, 0.15, Double.MIN_VALUE}; 
     gblDecks.rowWeights = new double[]{1.0, Double.MIN_VALUE}; 
     deck.setLayout(gblDecks); 

Das Problem kommt, wenn ich versuche, Tasten zu diesem Panel hinzuzufügen, da sie Platz nehmen auf, wie viele sie sind, auch tho sie eine feste Größe haben sollte. Wenn ich zum Beispiel

Ich erstelle 4 Tasten und das Panel soll 4 Taste und 2 "leere Leerzeichen" haben. Aber stattdessen hat es 4 Knöpfe, die den ganzen Raum einnehmen, den sie können. enter image description here

Wenn ich tun

  for(int j=0; j<6; j++){ 
      JButton activate= new JButton("ACTIVATE LEADER CARD"); 
      GridBagConstraints gbcActivate = new GridBagConstraints(); 
      gbcActivate.gridx = j; 
      gbcActivate.fill = GridBagConstraints.BOTH; 
      deck.add(activate, gbcActivate); 
      } 

ich diese bekommen statt enter image description here

Sollte nicht die Dimensionen festgelegt werden? Kann mir jemand helfen?

+3

Da ich nicht eine [mcve] von Ihnen zu testen, sagen Sie mir, was passiert, wenn Sie diese Zeile entfernen: 'gbcActivate.fill = GridBagConstraints.BOTH;'? – Frakcool

+1

Genau was @Frakcool sagt. –

+1

Lesen Sie den Abschnitt aus dem Swing-Lernprogramm zu [Verwendung von GridBagLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html), um zu erklären, wofür jede Einschränkung verwendet wird. Sie können auch einen einfacheren Layout-Manager wie 'FlowLayout' verwenden. – camickr

Antwort

1

gbcActivate.fill = GridBagConstraints.BOTH

Wenn wir die tutorial gehen heißt es:

füllen
verwendet, wenn der Anzeigebereich der Komponente größer ist als die gewünschte Größe der Komponente, um zu bestimmen, ob und wie die, um die Größe Komponente. Gültige Werte (definiert als GridBagConstraints-Konstanten) sind NONE (Standard), HORIZONTAL (die Komponente muss breit genug sein, um den Anzeigebereich horizontal zu füllen, aber nicht die Höhe zu ändern), VERTICAL (die Komponente muss groß genug sein, um den Anzeigebereich vertikal zu füllen , aber ändern Sie nicht seine Breite), und BOTH (lassen Sie die Komponente seinen Anzeigebereich vollständig ausfüllen).

So wird es den Anzeigebereich independtly von füllen, was Sie für die columnWeights angeben, usw. Versuchen Sie es zu entfernen oder es für GridBagConstraints.NONE

ändern oder wie oben in den Kommentaren vorgeschlagen, verwenden Sie einen anderen layout manager solche wie

Verwandte Themen