Abstände im GridLayout ändern

Karuka

Mitglied
Hallo Leute!

Ich versuche mithilfe des GridLayouts eine durchgängige grafische Oberfläche zu erzeugen. Es zeigt sich jedoch ein Problem auf. Dieses Problem tritt jedoch nur bei Grafiken auf, bei z.B. Buttons hingegen nicht.

Mein Problem ist, dass ich zwar alle Zellen im Layout mit Grafiken zu füllen kann jedoch liegen diese nicht "eng" aneinander so das sie aneinander anschließen. Das einzige Ergebnis was ich erziehle ist, das ich Abstände zwischen den einzelnen Bilder habe.

Dementsprechend meine Frage, gibt es einen Weg diese Abstände zu verändern so das ich diese Abstände loswerde oder gibts es sogar eine bessere Methode für mein Vorhaben?


hier der Screen von meinen Problem

2ywhjqr.jpg


auf wunsch füge ich noch meinen Quellcode ein, falls dieser benötigt wird.
 

Karuka

Mitglied
Ich habe mit vgab und hgab rumprobiert aber mein Problem scheint es nicht zu lösen.
Wenn ich vgab und hgab verwende, reduziert es mir zwar die Abstände aber verkleinert auch die Grafiken und/oder verzieht diese, sprich aus meinen Quadraten werden Rechtecke...

Hier der Auszug des Quellcodes in dem ich hgab und vgab verwende
(Konstruktor meiner Klasse Layout).

Java:
   public Layout() {
       int zeile=10;
       int spalte=10;
       int hgab=-18;
       int vgab=-18;
       setLayout(new GridLayout(zeile,spalte,hgab,vgab));
     }

Ich denke mir mal, das es richtig ist, dass ich negative Zahlen als Werte für hgab und vgab verwende. Ohne diese werte oder 0 als Wert bekomme ich das Ergebnis was ich oben schon als Screenshot gepostet habe.
 

bERt0r

Top Contributor
Lies dir doch bitte die Javadoc durch und verwende nicht einfach irgenwelche Parameter. Wenn du keinen Abstand zwischen den Komponenten haben willst, verwendest du entweder gaps von 0 (Gap = Spalt) oder du nimmst gleich den einfacheren Konstruktor, wo du nur rows und columns angeben musst.
Der Konstruktor funktioniert so: (anzahlDerZeilen, anzahlDerSpalten, abstandZwischenSpalten, abstandZwischenZeilen)
 

Karuka

Mitglied
Ich hab mir sowohl das Javadoc als auch das FAQ zum GridLayout durchgelesen und finde immernoch keine Lösung...
Entweder reden wir hier grade alle anneinander vorbei.. oder ich versteh was falsch und bekomms einfach nicht auf die Reihe.. Dementsprechend rolle ich lieber das ganze Problem erneut auf und diesesmal so detailiert wie nur irgendwie möglich.

Mein Programm:
Java:
 import java.awt.*;
 import javax.swing.*;

 public class Layout extends JFrame {
  static int zeile=5, spalte=5;
  static int az = (zeile*spalte);                  // Anzahl Panel/Label
 
     public Layout() {
       int hgap=0;
       int vgap=0;
       setLayout(new GridLayout(zeile,spalte,hgap,vgap));
     }
          
     public static void main(String[] args){
       Layout derp = new Layout();
       JPanel[] panel = new JPanel[az];
       JLabel[] grafik = new JLabel[az];
     
       ImageIcon bild2 = new ImageIcon("texturen/wandfeld.png");

       for(int i=0; i<az; i++){
         panel[i] = new JPanel(); 
         grafik[i] = new JLabel(bild2); 
         panel[i].add(grafik[i]);                   // Grafiken im Panel einfügen
         derp.add(panel[i]);                       // Panel im Layout einfügen
       }

       derp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       derp.setVisible(true);
       derp.pack();
       derp.setTitle("Fenster");
     }
 }

Der Screen wie das ganze aussieht:
5ukzfb.jpg

Wie man sieht enstehen Spalten zwischen den einzelnen Grafiken, genauso wie auf den Screen in meinem ersten Post. Dieses Ergebnis bekomme ich wenn ich hgap/vgap auf 0 setze oder ganz aus dem Quellcode streiche.

Wenn ich hgap/vgap auf einen wert gößer 0 setze, zB 5 vergößern sich die Abstände (werd ich ja wohl nicht als screen einfügen müssen, da gibts auch keine Probleme).
Jedoch will ich ja die Abstände verringern auf eine größe das diese nichtmehr sichtbar vorhanden sind. Dementsprechend dachte ich mir einfach:"Hey, ich könnte negative Werte als Abstände nehmen und so die einzelnen Bilder aneinander rücken". Gesagt getan hgap/vgap auf einen negativen wert gesetzt(im screen bsp -15) und folgendes Ergebnis erzielt:
qs9wl0_th.png


bei:
Java:
       public Layout() {
       int hgap=-15;
       int vgap=-15;
       setLayout(new GridLayout(zeile,spalte,hgap,vgap));
     }

Wie man sehen kann, werden aus den Quadraten in der obersten Zeile und der äüßeren linken Spalte zu Rechtecken und die restlichen Quadrate werdern deutlich kleiner, wobei dies auch die Rechtecke betrifft und nur das erste Quadrat in der linken oberen Ecke unverändert zu bleiben scheint.
Jedenfalls werden auch die Abstände kleiner... dementsprechend kann ich wohl nicht ganz falsch liegen mit meiner Theorie, dass ich negative werte vlt. dafür verwenden sollte...

Ich habe alle hilfen durchgelesen die mir bisher vorgeschlagen wurden und entweder habe ich etwas falsch verstanden oder übersehe einfach irgendetwas entscheidendes.
Jedenfalls hoffe ich das mit dieser genaueren Schilderung eine Lösung für mein Problem gefunden werden kann.
 

L-ectron-X

Gesperrter Benutzer
Das Problem liegt in den festen Dimensionen der Grafikdatei.
Das GridLayout passt die Dimensionen von Komponenten automatisch an, aber nicht die von Grafiken.
Sobald du das Fenster größer ziehst, werden die Abstände größer.
Du wirst da einen anderen Weg finden müssen.

Java:
import java.awt.*;
import javax.swing.*;

public class Squares extends JPanel {
   public Squares() {
      super(new GridLayout(0, 8, 1, 1));
      setPreferredSize(new Dimension(500, 500));
      for(int i = 0; i < 64; i++) {
         JLabel label = new JLabel();
         label.setBackground(Color.BLUE);
         label.setOpaque(true);
         add(label);
      }
   }
   
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            JFrame frame = new JFrame("Quadrate");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new Squares());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
         }
      });
   }
}
 

Anhänge

  • Squares.png
    Squares.png
    14,6 KB · Aufrufe: 39

Camill

Bekanntes Mitglied
Das ganze ist auch zu sehen wenn man den JPanel's eine Hintergrundfarbe gibt - diese liegen dann nämlich aneinander.
Wenn man den Inhalt der for-Schleife jedoch in einem "Rutsch" macht scheint es wie gewünscht auszusehen(zumindestens bei mir). Also so:
Java:
derp.add(new JPanel().add(new JLabel(bild2)));

[EDIT]Habe mal ein wenig rum probiert, scheint wohl am FlowLayout des Panel's zu liegen. Ändert man diesen zb. auf ein Border- oder GridLayout füllen die Bilder diesen aus.[/EDIT]
 
Zuletzt bearbeitet:

Karuka

Mitglied
Ich hab es mal mit deinem Vorschlag versucht Camill, dass ich alles in einen "Rutsch" mache, scheint auch zu funktionieren aber ich davon abgelassen einfach aus dem Grund das ich es nicht ganz zum laufen bekommen habe wie ich es wollte.
Ich wollte nämlich noch einbringen, dass wenn i zB den Wert 5 hat ein anderes Bild einsetzt. Es hat ein kleines bisschen rumgebuged (inform dessen, dass es einfach in mehrere Panel ein anderes Bild eingesetzt hat).
Jedenfalls hab ich mich dazu entschieden einfach die Panel noch in der Farbe des Bildes umzufärben um optisch mein gewünschtes Ziel zu erreichen. Danke für all die Hilfe :)

Mein Ergebnis(nur die main):
Java:
public static void main(String[] args){
       int r,gr,b;
       Layout derp = new Layout();      
       JPanel[] panel = new JPanel[az];
       JLabel[] grafik = new JLabel[az];
       Color c = new Color(r=62,gr=35,b=229);         
                                                   
       ImageIcon bild1 = new ImageIcon("texturen/gehfeld.png");
       ImageIcon bild2 = new ImageIcon("texturen/wandfeld.png");

       for(int i=0; i<az; i++){
         panel[i] = new JPanel();                  // einzelne Felder i im Array zuweisen
         grafik[i] = new JLabel(bild2);            // Grafiken JLabel übergeben und dem Objekt Array zuweisen
         panel[i].setBackground(c);                // Abstände einfärben
          if(i==45){
          grafik[i] = new JLabel(bild1);
          panel[i].setBackground(Color.white);
         }

         panel[i].add(grafik[i]);                   // Grafiken im Panel einfügen
         derp.add(panel[i]);                        // Panel im Layout einfügen
       }
 

Anhänge

  • screen java.png
    screen java.png
    29,3 KB · Aufrufe: 56
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Formular mit GridBaglayout und Abstände von Labels AWT, Swing, JavaFX & SWT 2
K abstände zwischen Panels? AWT, Swing, JavaFX & SWT 3
E GridLayout auf ScrollPane AWT, Swing, JavaFX & SWT 4
thor_norsk GridLayout AWT, Swing, JavaFX & SWT 11
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
pkm kryptisches Verhalten bei GridLayout AWT, Swing, JavaFX & SWT 4
K Swing GridLayout - x und y bei Mausklick ausgeben AWT, Swing, JavaFX & SWT 4
S GridLayout SWT: Anordnung Composites nebeneinander AWT, Swing, JavaFX & SWT 2
B GridLayout - wie am besten implementieren AWT, Swing, JavaFX & SWT 3
B GridLayout Basics AWT, Swing, JavaFX & SWT 1
L Eigene JComponent in GridLayout AWT, Swing, JavaFX & SWT 9
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
F JPanel "verschmelzen" GridLayout AWT, Swing, JavaFX & SWT 10
M LayoutManager GridLayout funktioniert nicht AWT, Swing, JavaFX & SWT 0
T LayoutManager GridLayout panel.setSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
F Gridlayout AWT, Swing, JavaFX & SWT 6
A JPanel oder GridLayout Größe festsetzten AWT, Swing, JavaFX & SWT 4
X GridLayout JPanel austauschen AWT, Swing, JavaFX & SWT 2
A JFrame Größenänderung mit Maus und GridLayout AWT, Swing, JavaFX & SWT 10
J Button in GridLayout AWT, Swing, JavaFX & SWT 2
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
L LayoutManager GridLayout verschiebt sich AWT, Swing, JavaFX & SWT 6
B GridLayout AWT, Swing, JavaFX & SWT 6
T Spaltengröße einzelner Spalten in Gridlayout festlegen AWT, Swing, JavaFX & SWT 3
Karuka 2D-Grafik Bilder in GridLayout einfügen AWT, Swing, JavaFX & SWT 7
C Scollpane an dynamisches GridLayout anpassen? AWT, Swing, JavaFX & SWT 3
J Swing Bilder anzeigen in Gridlayout AWT, Swing, JavaFX & SWT 11
C Linien über GridLayout zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme mit Gridlayout AWT, Swing, JavaFX & SWT 4
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
Z Swing JButton erweitern/Gridlayout AWT, Swing, JavaFX & SWT 2
L Swing GridLayout AWT, Swing, JavaFX & SWT 4
lumo LayoutManager SWT GridLayout - Reihenfolge ändern AWT, Swing, JavaFX & SWT 7
C Swing GridLayout: Kann man die Spaltenbreiten variabel gestalten? AWT, Swing, JavaFX & SWT 4
J SWT Größe eines Composite mit Gridlayout festlegen AWT, Swing, JavaFX & SWT 2
Y Kein GantChart in einem GridLayout AWT, Swing, JavaFX & SWT 5
M Formular in GridLayout ? AWT, Swing, JavaFX & SWT 17
R LayoutManager Problem mit GridLayout AWT, Swing, JavaFX & SWT 5
F LayoutManager GridLayout 0/0 auf andere Ecke setzen AWT, Swing, JavaFX & SWT 4
Rudolf Swing Gridlayout und Grouper vorhanden? AWT, Swing, JavaFX & SWT 4
S SWT GridLayout scrollbar machen? AWT, Swing, JavaFX & SWT 7
A Gridlayout Vertikal anordnen AWT, Swing, JavaFX & SWT 6
D LayoutManager GridLayout, 2 labels nebeneinander AWT, Swing, JavaFX & SWT 8
B Swing GridLayout.add über 2 Spalten? AWT, Swing, JavaFX & SWT 7
R LayoutManager GridLayout verändert isch andauernd AWT, Swing, JavaFX & SWT 4
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
B GridLayout und scrollbar AWT, Swing, JavaFX & SWT 5
J Swing Bild in GridLayout AWT, Swing, JavaFX & SWT 8
aze GridLayout: Keine automatische Ausdehnung AWT, Swing, JavaFX & SWT 2
M SWT keine Scrollbar bei widgets.List und GridLayout AWT, Swing, JavaFX & SWT 2
M Image an Gridlayout anpassen AWT, Swing, JavaFX & SWT 5
E SWT Problem mit Gridlayout AWT, Swing, JavaFX & SWT 3
G SWT GridLayout AWT, Swing, JavaFX & SWT 2
lumo SWT GridLayout - clear? AWT, Swing, JavaFX & SWT 4
T GridLayout Zeilen Hintergrund AWT, Swing, JavaFX & SWT 5
N Gridlayout macht Probleme AWT, Swing, JavaFX & SWT 3
L GridLayout verändert festgesetzte Größe der Komponenten AWT, Swing, JavaFX & SWT 12
S Gridlayout - Tabellenzeile "beenden" AWT, Swing, JavaFX & SWT 3
Dragonfire GridLayout Probleme AWT, Swing, JavaFX & SWT 4
A JLabel, Icons und GridLayout AWT, Swing, JavaFX & SWT 3
C JPanel-Array in GridLayout AWT, Swing, JavaFX & SWT 4
G SWT GridLayout AWT, Swing, JavaFX & SWT 3
N Gridlayout 2. Spalte füllen AWT, Swing, JavaFX & SWT 4
W Problem mit GridLayout AWT, Swing, JavaFX & SWT 11
K Problem mit nem GridLayout AWT, Swing, JavaFX & SWT 5
T GridLayout, zu wenig Platz zwischen Widgets AWT, Swing, JavaFX & SWT 3
T SWT/Eclipse Form Controls zur Laufzeit hinzufügen,GridLayout AWT, Swing, JavaFX & SWT 4
M GridLayout mit fester Größe möglich? AWT, Swing, JavaFX & SWT 3
E Einfache Frage zu GridLayout AWT, Swing, JavaFX & SWT 35
G Größe der einzelenen Felder im GridLayout einstellbar? AWT, Swing, JavaFX & SWT 5
P Canvas in JFrame mit GridLayout AWT, Swing, JavaFX & SWT 4
F GridLayout: verschiedene Spaltenbreiten AWT, Swing, JavaFX & SWT 2
S GridLayout ? AWT, Swing, JavaFX & SWT 5
D AutoResize bei GridLayout ausschalten? AWT, Swing, JavaFX & SWT 2
D GridLayout mit nur einer Spalte, aber n Zeilen AWT, Swing, JavaFX & SWT 2
E GridLayout seltsame Anordnungsstrategie AWT, Swing, JavaFX & SWT 6
S Problemen mit Canvas-Objekten im GridLayout AWT, Swing, JavaFX & SWT 8
L Grids benennen beim GridLayout AWT, Swing, JavaFX & SWT 5
S GridLayout mit sehr großen Abständen AWT, Swing, JavaFX & SWT 3
I SWT GridLayout AWT, Swing, JavaFX & SWT 5
V Frage zu GridLayout. AWT, Swing, JavaFX & SWT 3
P SWT GridLayout AWT, Swing, JavaFX & SWT 5
O gridlayout konstante größe AWT, Swing, JavaFX & SWT 3
TRunKX Problem mit dem GridLayout und den proportionen AWT, Swing, JavaFX & SWT 4
P SWT: GridLayout und Textfelder AWT, Swing, JavaFX & SWT 1
M GridLayout funktioniert nicht mehr. AWT, Swing, JavaFX & SWT 2
F GridLayout horizontal ausrichten AWT, Swing, JavaFX & SWT 6
K GridLayout: Colspan, Rowspan AWT, Swing, JavaFX & SWT 2
R GridLayout spinnt AWT, Swing, JavaFX & SWT 14
C leeres Element in Gridlayout einfuegen AWT, Swing, JavaFX & SWT 3
D Problem bei GridLayout und JPanels AWT, Swing, JavaFX & SWT 4
J GridLayout AWT, Swing, JavaFX & SWT 5
H GridLayout: Größe einer Komponente ändern AWT, Swing, JavaFX & SWT 2
L Frage zum GridLayout AWT, Swing, JavaFX & SWT 4
G kann man die aufteilung von GridLayout beeinflussen ? AWT, Swing, JavaFX & SWT 10
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben