0

我正在为一个项目制作国际象棋游戏,我想做的第一件事是创建一个框架,然后用 64 个 JButton(组织为 8x8)填充它,每个 JButton 将充当棋盘上的方格。我对 Java 还是很陌生,但我仍然认为我不应该得到我得到的错误,它不是在不久前发生的,但是当框架之前确实加载时,没有一个 JButtons做过。

在使用 3D 数组向我的 JButtons 添加坐标时,我似乎遇到了问题,我不断收到错误消息“方法 add(ChessSquare) 未针对 ChessBoard 类型定义”,此外 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));
                }
}
4

2 回答 2

1

有多个问题:

首先也是至关重要的是,您根本没有添加ChessSquare按钮。所以从框架调用add()方法来添加按钮。

第二:在构造函数的末尾调用setVisible(true)你的框架。

第三:为您的框架设置布局 -frame.setLayout(grid);

第四:设置默认关闭操作——frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

PS 也pack()改为调用setSize()框架。

祝你好运!

于 2013-03-21T21:02:57.393 回答
1

另一个问题是当我尝试从 ChessSquare 中的 3D 数组中保存正方形的坐标时

xy作为 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

于 2013-03-21T20:36:31.197 回答