所以,我正在制作一个棋盘,每当我试图按下按钮时,它们就会重新定向,并在右下角变得越来越混乱。右上角的第一个按钮(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;}
}
答案 0 :(得分:1)
我认为您的部分问题与getX
课程的getY
和TestMethods
方法有关。这些是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 ;}
}
答案 1 :(得分: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);
}
答案 2 :(得分: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);
}