2017-12-25 38 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)에 의해 그리드 레이아웃 패널을 창조하고 싶었다. 첫 번째 행에는 빨간색, 검은 색, 빨간색, 검은 색, 빨간색, 검은 색, 빨간색, 검은 색 사각형이 있고 두 번째 행에는 검은 색, 빨간색, 검은 색, 빨간색, 검은 색, 빨간색, 검은 색, 빨간색 사각형이 포함되어 있어야합니다. 나는이 프로그램을 실행하면

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으로 설정하는 것이 좋습니다. 또 하나의 힌트는 JFrame#add을 호출하여 contentPane에 구성 요소를 추가하므로 contentPane을 가져 와서 JFrame에 무언가를 추가 할 필요가 없습니다. 또한 기본 JFrameSquare 사이에 중개자 JPanel이 필요하지 않습니다. 이 도움이 될

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

희망 :

또한 I 생성 및 출력 프레임에 Square의 추가의 어려움을 줄이기 위해 작은 주 방식을 바꾸었다.

+0

답장을 보내 주셔서 감사합니다. 늦어서 미안해. 그것은 내가 일주일 후에 jLayeredPane로 sqaures를 구현하려고 시도했을 때 나는 당신의 도움을받은 그날을 훌륭하게 작동 시켰고 나는 그것을 다 망쳤으며 sqaures는 더 이상 체커 보드를 형성하지 않았다. 단지 한 sqaure 그렸습니다. –

+0

당신을 진심으로 환영합니다. 행복하게 도왔다. StackOverFlow에서는 일반적으로 답변이 도움이 될 때 해당 답변의 왼쪽에있는 녹색 체크 표시를 선택하여 질문의 답변으로 표시 할 수 있습니다. – STaefi

+0

또한 'JLayeredPane'의 경우 [MCVE]를 사용하는 것이 더 빠르고 더 나은 도움을받을 수있는 또 다른 질문이 될 수 있습니다. – STaefi