我正在为一个项目制作一个国际象棋游戏,我想要做的第一件事就是创建一个框架,然后用64个JButton(有组织的8x8)填充它,每个JButton将作为棋盘上的方块。我仍然是Java的新手,但我仍然认为我不应该得到我正在获得的错误,它不会发生在前一段时间,但是当框架确实加载之前说,没有JButtons那样。
我似乎当涉及到添加坐标使用3D阵列我Jbutton将被具有,我不断收到错误的问题“的方法添加(ChessSquare)是未定义的类型的棋盘上,”上Eclipse之上保持让我帮助解决我的错误,但我认为接受它们可能会使事情变得更糟。
另一个问题是当我试图在ChessSquare中保持3D数组的方形坐标时。
我目前有2个班级,ChessBoard和ChessSquare,我试图让ChessBoard使用ChessSquare来制作作品。
对不起,如果我不是很清楚,我会非常累。
提前感谢您的帮助。
这是我的代码:
板:
import java.awt.GridLayout;
import java.io.IOException;
import javax.swing.JFrame;
import Logic.ChessSquare;
public class ChessBoard {
//chess board constructor
public ChessBoard() throws IOException {
//create grid and grid dimensions
GridLayout grid = new GridLayout(8,8);
//create frame and set specifications of frame
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setSize(458, 458);
frame.setTitle("I'm starting to prefer C");
//initialise 3D array
ChessSquare[][] square = new ChessSquare[8][8];
//create 64 instances of ChessSquare and assign each square as an element in the 3D array
for (int i = 0; i < 8; i++){
for(int l = 0; l < 8; l++){
square[i][l] = new ChessSquare();
this.squarePos(square[i][l]); //this is where my main gripe is
}
}
}
public static void main(String[] args) throws IOException{
new ChessBoard();
}
}
广场:
package Logic;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
//chess square class, 1 instance of which for each square in the grid
public class ChessSquare extends JButton {
/**
*
*/
private static final long serialVersionUID = 1L;
//instance variables for position and piece
public int squarePos;
public String selectedPiece;
//accessor method for position
public void squarePos(){
int squarePos = ChessBoard.square;
}
//constructor for chess squares
public ChessSquare() throws IOException {
BufferedImage buttonIcon = ImageIO.read(new File("E:\\Eclipse\\ChessF\\src\\Images\\EmptySquare.jpg"));
JButton button = new JButton(new ImageIcon(buttonIcon));
}
}
答案 0 :(得分:1)
“另一个问题是当我尝试在ChessSquare中保存3D数组的方块坐标时”
将x
和y
作为ChessSquare的属性,并在ChessSquare的构造函数中接收值:
public class ChessSquare extends JButton {
private int x, y;
/**
*
*/
private static final long serialVersionUID = 1L;
//instance variables for position and piece
public int squarePos;
public String selectedPiece;
public ChessSquare(int x, int y){
this.x = x;
this.y = y;
}
...
为了初始化方块并渲染它们,修改ChessBoard
的构造函数中的循环。您需要将新创建的ChessSquare
添加到框架中。
for (int i = 0; i < 8; i++){
for(int l = 0; l < 8; l++){
ChessSquare square = new ChessSquare(i, l);
square[i][l] = square;
frame.add(square);
}
}
之后,每个ChessSquare
都知道其x
和y
位置。
Oracle有一些很棒的教程:http://docs.oracle.com/javase/tutorial/java/TOC.html。
在获得基础知识之后,请阅读Swing:http://docs.oracle.com/javase/tutorial/uiswing/components/index.html
答案 1 :(得分:1)
存在多个问题:
首先,至关重要的是你根本没有添加ChessSquare
按钮。因此,请从框架中调用add()
方法添加按钮。
第二:在构造函数的末尾为你的框架调用setVisible(true)
。
第三步:设置框架的布局 - frame.setLayout(grid);
第四步:设置默认关闭操作 - frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
P.S。另请致电pack()
而不是setSize()
了解相框。