2016-12-09 1 views
0

Ich bin derzeit Codierung ein Java-Projekt, und ich brauche ein JPanel namens Board zu enthalten einige Fliesen, die selbst JPanel sind, füge ich sie zu einem Layout der entsprechenden Größe, aber wenn ich alles mit hinzufügen Knöpfe in einer Gruppe in einem JFrame, nur die erste Tile ist in einer angemessenen Größe und andere haben lächerliche Größe wie 1p Breite und 50p Höhe oder 1 * 1p.GridLayout Panel Hinzufügen nicht in Betracht ziehen bevorzugte Größe

Ich habe nicht das Gefühl, dass ich etwas vermisse, alles wird im JFrame hinzugefügt und zum korrekten Layout hinzugefügt, mit der richtigen Anzahl von Zeilen und Zeilen, und die Größe wird auf 50 * 50p in der Tile-Klasse festgelegt. Hier sind einige Code-Schnipsel die Grafikeinstellungen enthalten, insbesondere die Konstrukteure:

Tile.java:

class Case extends JPanel 
{ 

private int _color; 
private boolean _star; 
private Case _casePere; 
private ArrayList<Case> _fils; 
private int _x,_y; 

public Case(int x, int y) 
{ 
    _color = 0; 
    _star = false; 
    _casePere = null; 
    _fils = new ArrayList<Case>(); 
    _x = x; 
    _y = y; 
    setPreferredSize(new Dimension(50,50)); 
    setMinimumSize(new Dimension(50,50)); 
    setBackground(Color.WHITE); 
} 

Board.java:

class Board extends JPanel{ 

private Case[][] _grid; 
private Case[] _starsp1; 
private Case[] _starsp2; 

// constructeur 
public Board(int nbStars, int length){ 



    _grid = new Case[length][length]; 
    _starsp1 = new Case[nbStars]; 
    _starsp2 = new Case[nbStars]; 

    //graphisme 
    Dimension d = new Dimension(50*length, length*50); 

    setBackground(Color.BLACK); 
    setPreferredSize(d); 


    GridLayout layout = new GridLayout(Constante.length, Constante.length,2 ,2); 
    setLayout(layout); 

    for(int y=0; y<length; ++y) 
    { 
     for(int x=0; x<length; ++x) 
     { 

      _grid[x][y] = new Case(x,y); 
      add(_grid[x][y]); 
     } 
    } 

wenn Sie wollen, kann ich einige Schnipsel hinzufügen von Die Window-Klasse, aber neben dem Board haben andere Komponenten keine Probleme, und es wird hauptsächlich einige Komponenten hinzugefügt und gruppiert. Hier ist ein Screenshot von dem Ausgang, so können Sie sehen, wie die Boards Zeichnung

Bearbeiten verhält: Ich war zwingende getX und getY in meinem Fall Klasse JPanel ist ein, ein bisschen dumm Ausgabe überschrieben wieder, danke für die Antworten

https://i.stack.imgur.com/BAosv.png

+0

Veröffentlichen Sie eine ordnungsgemäße [MCVE], die das Problem veranschaulicht. Das ist ein Rahmen mit nur der Tafel und seinen Kindern. Stellen Sie sicher, dass dieser Teil des Codes zuerst funktioniert und fügen Sie dann die anderen Komponenten hinzu. – camickr

Antwort

2
setPreferredSize(d); 

Legen Sie nicht die bevorzugte Größe der Karte fest. Der Layout-Manager des Boards bestimmt die bevorzugte Größe basierend auf der Anzahl der zum Raster hinzugefügten Komponenten und der Größe der größten hinzugefügten Komponente.

Hinweis, (basierend auf der folgenden Zeile) möchten Sie einen Abstand von 2 Pixel zwischen jeder Komponente, die Ihre Berechnung nicht enthält. Lassen Sie den Layout-Manager also seine Arbeit machen.

GridLayout layout = new GridLayout(Constante.length, Constante.length,2 ,2); 

Wir wissen nicht, was Constante.length ist. Sie übergeben eine Längenvariable an Ihre Klasse, verwenden Sie diese Variable.

Warum hat Ihre Klasse Case so viele Instanzvariablen? Diese Variablen werden im gebuchten Code nie verwendet. Vielleicht haben Sie andere Methoden, die Probleme mit dem Layout verursachen. Überschreiben Sie zum Beispiel nicht getX() oder getY() diese Methoden werden vom Layout-Manager verwendet.

+0

Diese beiden Längen sind die gleichen, weil der Constructor mit Constante.length aufgerufen wird, es ist irgendwie chaotisch, sorry, es ist irgendwie ein Ergebnis des Versuchs, dieses Layoutproblem zu debuggen, sorry. Und wie für die Variablen, andere Methoden in Board und Case nichts mit Grafiken zu tun, so habe ich sie aus, um das Snippet kurz, vielleicht hätte ich die nutzlosen Variablen, sorry wieder gereinigt – deathlab

Verwandte Themen