0

それで、私はチェス盤を作っています。ボタンを下に置こうとすると、ボタンの向きが変わり続け、右下に向かってますます乱雑になります。右上の最初のボタン (squareB[0][0]) は問題ないように見えますが、他のすべての 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;}
}
4

3 に答える 3

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);
}
于 2013-04-26T23:57:12.720 に答える
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);
}
于 2013-04-26T23:37:29.750 に答える