当前位置: 首页 > 知识库问答 >
问题:

试图创建一个充满JButtons的框架,但我的JButtons不会加载

范翰海
2023-03-14

我正在为一个项目做一个国际象棋游戏,我想做的第一件事就是创建一个框架,然后用64个JButtons(8x8组织)填充它,每个JButtons将作为国际象棋棋盘上的方块。我对Java还是一个新手,但我仍然不认为我应该得到我得到的错误,它没有发生在一段时间之前,但也就是说,当帧加载之前,没有一个JButtons。

当我使用3D数组向我的JButtons添加坐标时,我似乎遇到了一个问题,我不断得到错误“方法add(ChessSquare)是未定义的,用于类型ChessBoard”,此外,Eclipse不断为我的错误提供帮助,但我认为我接受这些错误可能会使事情变得更糟。

另一个问题是,当我试图在Chesssquare中保存来自3D阵列的方块坐标时。

我目前有2个类,棋盘和棋子,我正在尝试让棋盘使用棋子来制作棋子。

抱歉,如果我不是很清楚,我太累了。

事先谢谢你的帮助。

下面是我的代码:

董事会:

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));
                }
}

共有2个答案

胡景焕
2023-03-14

存在多重问题:

首先,也是关键的一点是,您根本没有添加chesssquare按钮。因此从frame调用add()方法来添加按钮。

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

第三:为帧设置布局-frame.setlayout(网格);

第四:设置默认关闭操作-frame.setDefaultCloseOperation(jframe.dispose_on_close);

附注。还可以调用pack()而不是setsize()作为frame。

祝你好运!

轩辕晔
2023-03-14

“另一个问题是当我试图从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);
        }
    }

之后,每个棋子都知道它的xy位置。

Oracle有一些很棒的教程:http://docs.Oracle.com/javase/tutorial/java/toc.html。

在掌握了基本知识之后,请阅读Swing:http://docs.oracle.com/javase/tutorial/uiswing/components/index.html

 类似资料:
  • 我是GUI的初学者。 有没有一种快速的方法可以将同一个按钮/图像设置到GUI中的多个位置?为了更好地说明,如果我想在GUI中的不同位置使用这个JButton 10次,我需要创建一个新的JButton(new ImageIcon…)10次? 按钮不一定会导致任何事情,这只是为了展示。

  • 我现在正在试着做一个数独网格。因此,我使用了两个数组(双维),一个数组包含所有的JButtons,另一个数组包含9个JPanels。我在每个JPanel中放置了9个按钮,我在每个JPanel中使用了(3,3)的GridLayout,所有的JPanel都在一个更大的JPanel中,它也使用了GridLayout。问题是按钮在窗口的底部,所以不是所有的按钮都显示出来。我为第一个JPanel(包含前9个

  • toValid函数只是更正一个字符串,您可以忽略它。

  • 我正在构建一个清单Gui应用程序,我希望用描述的第一个字母来搜索项目。所以,我需要在JPanel上显示26个小按钮(将是字母表中的字母)。然后使用搜索按钮来对应保存的文件。但是我似乎不能让按钮显示???它只是JPanel。我这里只有整个程序的片段。只是突出显示其中的JPanel和JButton。

  • 我有一个名为input的整数,它被转换为字符串字符串,我有我的一个按钮。AddActionListener集和公共void actionPerformed(ActionEvent e){ 如果(e.getsource()==oneButton){ 有人帮忙吗?