2016-12-09 3 views
0

私は現在Javaプロジェクトをコーディングしていますが、JPanelであるいくつかのタイルを含むJPanelというボードが必要です。それらを適切なサイズのレイアウトに追加します。ボタンはJFrameのgrouplayoutで、最初のタイルは適切なサイズになり、他は1pの幅と50pの高さや1 * 1pのようなばかげたサイズになります。GridLayout preferredreedのサイズを考慮しないパネルの追加

私は何かが間違っているとは思わないが、すべてがJFrameに追加され、正しい行数と行数で正しいレイアウトに追加され、サイズはTileクラスで50 * 50pに設定されます。ここでは、グラフィック設定を含むいくつかのコードスニペットは、特にコンストラクタは、以下のとおりです。

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]); 
     } 
    } 

、私はいくつかのスニペットを追加することができますWindowクラスですが、Boardのほかに、他のコンポーネントには問題がありません。主に、いくつかのコンポーネントを追加してグループ化しています。私はJPanelのの1を上書き私の場合クラスでのgetXとのgetYをオーバーライドし、ちょっとダム問題を再度、答えてくれてありがとう

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

た:あなたは取締役会の描画が

編集をどのように動作するかを見ることができるようにここでは、出力のスクリーンショットです

+0

問題を示す適切な[mcve]を投稿してください。それは、ボードパネルとその子だけのフレームを作成することです。コードの最初の部分を取得してから、他のコンポーネントを追加します。 – camickr

答えて

2
setPreferredSize(d); 

ボードの推奨サイズを設定しないでください。ボードのレイアウトマネージャは、グリッドに追加されたコンポーネントの数と追加される最大のコンポーネントのサイズに基づいて優先サイズを決定します。

(下の行に基づいて)計算に含まれない各コンポーネント間に2ピクセルの間隔が必要です。レイアウトマネージャにその仕事をさせてください。

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

Constante.lengthはわかりません。長さ変数をクラスに渡すので、その変数を使用します。

また、Caseクラスには非常に多くのインスタンス変数がありますか?これらの変数は、投稿されたコードで使用されることはありません。レイアウトに問題を引き起こす他の方法があるかもしれません。たとえば、getX()またはgetY()をオーバーライドしないでください。これらのメソッドは、レイアウトマネージャによって使用されます。

+0

コンストラクタがConstante.lengthで呼び出されているので、これらの2つの長さは同じです。これはちょっと面倒です。申し訳ありませんが、レイアウトの問題をデバッグしようとした結果です。 そして、変数については、BoardとCaseの他のメソッドはグラフィックスに関連することを何もしないので、スニペットを短くするためにそれらを取り出しました。おそらく無駄な変数をきれいにして、すみません – deathlab

関連する問題