2013-04-26 3 views
0

그래서 체스 판을 만들고 있는데, 버튼을 내려 놓으려고 할 때마다 방향이 바뀌지 않고 계속 오른쪽 하단으로 더러워집니다. 오른쪽 상단의 첫 번째 버튼 (squareB [0] [0])은 정상적으로 보이지만 다른 모든 JButton은 엉망입니다.JPanels 안에 JButton 포맷하기

그럼 내 문제는이 문제를 해결하거나 특정 좌표에 버튼을 배치 할 수있게하는 것입니다.

import java.awt.*; 
import javax.imageio.ImageIO; 
import javax.swing.*; 
import java.awt.event.*; 
import java.util.ArrayList; 
import java.io.*; 

public class Test implements ActionListener 
{ 
private JFrame frame = new JFrame(); 
private JPanel[][] square = new JPanel[8][8]; 
private JButton[][] button = new JButton[8][8]; 
public static void main(String[] args) 
{ 
    new Test(); 
} 
Test() 
{ 
    frame.setLayout(new GridLayout(8,8)); 
    for(int x=0; x<8; x++) 
    { 
     for(int y=0; y<8; y++) 
     { 
      square[x][y] = new JPanel(); 
      frame.add(square[x][y]); 
      square[x][y].setSize(100,100); 
      square[x][y].setLayout(new GridLayout(1,1)); 
      if(y%2==0) 
       if(x%2==0) 
        square[x][y].setBackground(Color.white); 
       else 
        square[x][y].setBackground(Color.black); 
      if(y%2!=0) 
       if(x%2==0) 
        square[x][y].setBackground(Color.black); 
       else 
        square[x][y].setBackground(Color.white); 

      button[x][y] = new JButton(); 
      button[x][y] = new TestMethods(x,y); 
      square[x][y].add(button[x][y]); 
      button[x][y].setOpaque(false); 
      button[x][y].setContentAreaFilled(true); 
      button[x][y].setBorderPainted(true); 
      button[x][y].addActionListener(this); 
     } 
    } 
    frame.setSize(800,800); 
    frame.setVisible(true); 
} 
public void actionPerformed(ActionEvent e) 
{ 

} 
} 
class TestMethods extends JButton 
{ 
private int x, y; 
public TestMethods(int x, int y) 
{ 
    this.x = x; 
    this.y = y; 
} 
public int getX() {return x;} 

public int getY() {return y;} 
} 

답변

1

나는 문제의 일부가 귀하의 TestMethods 클래스의 getXgetY 방법에 관한 생각합니다. JButton에 의해 사용이 무시되는 방법은 그 부모에 그 위치를 결정하고 당신은

class TestMethods extends JButton 
{ 
    private int x, y; 
    public TestMethods(int x, int y) 
    { 
     this.x = x; 
     this.y = y; 
    } 
    public int getX() {return x;} 

    public int getY() {return y;} 
} 

그들에게 무시하지 않도록해야합니다 나는 것 대신에, 당신의 목적에 더 관련이 사용하는 방법 이름.

class TestMethods extends JButton 
{ 
    private int gridX, gridY; 
    public TestMethods(int x, int y) 
    { 
     this.gridX = x; 
     this.gridY = y; 
    } 
    public int getGridX() {return gridX ;} 

    public int getGridY() {return gridY ;} 
} 
+0

정말 고마워요! – user2317760

0

글쎄, 당신의 코드에 어떤 문제가 있는지 찾을 수 없으므로, 나는 똑같은 방법을 쓰고 있습니다. 나는 이것이 대답이 아니지만 유용 할 수 있습니다. :

public static void main(String[] args) { 
    final JFrame frame = new JFrame(); 
    frame.setPreferredSize(new Dimension(800, 800)); 
    frame.setLayout(new GridLayout(8, 8)); 

    boolean isWhite = true; 
    for (int i = 0; i < 8; i++) { 
     for (int j = 0; j < 8; j++) { 
      final JButton button = new JButton(); 
      if (isWhite) { 
       button.setBackground(Color.white); 
      } else { 
       button.setBackground(Color.black); 
      } 
      isWhite = !isWhite; 
      frame.add(button); 
     } 
     isWhite = !isWhite; 
    } 
    frame.pack(); 
    frame.setVisible(true); 
} 
0

MadProgrammer가 주어진 대답을보십시오. 또한 나는 체스 판을 만들기 위해 당신의 모범을 수정했습니다. 체스 판 패턴을 만드는 수정 된 방법을 살펴보십시오.

Test() 
{ 
    frame.setLayout(new GridLayout(8,8)); 
    for(int x=0; x<8; x++) 
    { 
    for(int y=0; y<8; y++) 
    { 
     square[x][y] = new JPanel(); 
     frame.add(square[x][y]); 
     square[x][y].setSize(100,100); 
     square[x][y].setLayout(new GridLayout(1,1)); 



     button[x][y] = new TestMethods(x,y); 
     button[x][y].setOpaque(true); 
     button[x][y].setContentAreaFilled(true); 
     button[x][y].setBorderPainted(true); 
     button[x][y].addActionListener(this); 

     if((y + x)%2==0) 
     { 
      button[x][y].setBackground(Color.WHITE); 
     } 
     else 
     { 
      button[x][y].setBackground(Color.BLACK); 
     } 

     square[x][y].add(button[x][y]); 
    } 
    } 
    frame.setSize(800,800); 
    frame.setVisible(true); 
}