2017-12-25 43 views
0

皆さん、皆、私はGUIでJavaでチェッカーボードを描こうとしています。私はゲームボードの四角形の正方形のクラスを作成しました。gridlayoutを使ってパネルに項目を配置する

広場クラス:

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

public class Square extends JPanel { 

private int width = 80; 
private int height = 80; 
private int x,y; 
private Color color; 

public Square(int x, int y, Color color) { 
    this.x = x; 
    this.y = y; 
    this.color = color; 
} 

public void paint(Graphics graphics){ 
    //setSize(new Dimension(width,height)); 
    graphics.setColor(color); 
    graphics.drawRect(x,y, width,height); 
    graphics.fillRect(x,y,width,height); 
} 
} 

は基本的に私はその後、正方形のオブジェクトのグリッドレイアウトパネルを追加し8で8のグリッドレイアウトでパネルを作りたかったのです。最初の行には赤、黒、赤、黒、赤、黒、赤、黒の四角が含まれ、2番目の行には黒、赤、黒、赤、黒、赤、黒、

public static void main(String[] args) { 

    JFrame frame = new JFrame(); 
    frame.setPreferredSize(new Dimension(600,600)); 

    JPanel panel = new JPanel(new GridLayout(8,8)); 
    panel.setLayout(new GridLayout(8, 8)); 
    panel.setBackground(Color.green); 

    Square redsqr1 = new Square(0,0, Color.RED); 
    Square blksqr1 = new Square(0,0, Color.BLACK); 
    Square redsqr2 = new Square(0,0, Color.RED); 
    Square blksqr2 = new Square(0,0, Color.BLACK); 
    Square redsqr3 = new Square(0,0, Color.RED); 
    Square blksqr3 = new Square(0,0, Color.BLACK); 
    Square redsqr4 = new Square(0,0, Color.RED); 
    Square blksqr4 = new Square(0,0, Color.BLACK); 

    Square redsqr5 = new Square(0,0, Color.RED); 
    Square blksqr5 = new Square(0,0, Color.BLACK); 
    Square redsqr6 = new Square(0,0, Color.RED); 
    Square blksqr6 = new Square(0,0, Color.BLACK); 
    Square redsqr7 = new Square(0,0, Color.RED); 
    Square blksqr7 = new Square(0,0, Color.BLACK); 
    Square redsqr8 = new Square(0,0, Color.RED); 
    Square blksqr8 = new Square(0,0, Color.BLACK); 

    panel.add(redsqr1); 
    panel.add(blksqr1); 
    panel.add(redsqr2); 
    panel.add(blksqr2); 
    panel.add(redsqr3); 
    panel.add(blksqr3); 
    panel.add(redsqr4); 
    panel.add(blksqr4); 
    panel.add(blksqr5); 
    panel.add(redsqr5); 
    panel.add(blksqr6); 
    panel.add(redsqr6); 
    panel.add(blksqr7); 
    panel.add(redsqr7); 
    panel.add(blksqr8); 
    panel.add(redsqr8); 

    frame.getContentPane().add(panel); 


    frame.pack(); 
    frame.setVisible(true); 

} 

私は出力が各正方形の間には大きなスペースを2列に配置された理由として出力PROGRAM OUTPUT HERE

は興味があるだけ取得するプログラムを実行します。赤、黒、赤、黒、赤、黒、赤、黒の四角と二番目の行に黒、赤、黒、赤、黒を含むように最初の列を持つために、 、赤、黒、赤い四角。

ご協力いただきありがとうございます。

答えて

1

レイアウトに必要なすべての四角形を64個追加していないためです。したがって、レイアウトセルはすべてのスペースを埋めるように引き伸ばされます。その結果、出力が乱雑になります。さらに、水平と垂直のギャップを0に設定することをお勧めします。もう1つのヒントは、JFrame#addを呼び出すことによってcontentPaneにコンポーネントを追加し、contentPaneを取得して何かをJFrameに追加する必要はありません。さらに、基礎となるJFrameSquareの間に仲介者JPanelは必要ありません。

はまた、私は、出力フレームにSquare Sを作成し、追加の苦難を軽減するためにmainメソッドを少し変更:これは役立つだろう

public static void main(String[] args) { 

    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
    frame.setPreferredSize(new Dimension(600,600)); 
    frame.setLayout(new GridLayout(8, 8, 0, 0)); 
    frame.getContentPane().setBackground(Color.green); 

    for (int i = 0; i < 8; i++) { 
     for (int j = 0; j < 8; j++) { 
      frame.add(new Square(0, 0, (i+j)%2==0 ? Color.RED : Color.BLACK)); 
     } 
    } 

    frame.pack(); 
    frame.setVisible(true); 
} 

希望を。

+0

ご返信ありがとうございます。申し訳ありませんが私の遅い返信。私があなたの助けを受けた日にはうまくいきました。その後、ほぼ一週間後にjLayeredPaneとしてsqauresを実装しようとしましたが、私はそれをすべて使いこなしました。そしてsqauresはチェッカーボードをもう形成しません。ちょうど1つのsqaureが描かれています。 –

+0

ようこそ。ハッピーは助けてくれました。 StackOverFlowでは、通常、回答が役立つときに、その答えの左側にある緑色のチェックマークをチェックして、質問の回答としてマークすることができます。 – STaefi

+0

また、 'JLayeredPane'の場合は、[MCVE]のもう一つの質問があり、より早くより良いヘルプを受けることができます。 – STaefi

関連する問題