如何在java中为棋盘制作棋盘格?

如何在java中为棋盘制作棋盘格?,java,swing,Java,Swing,我想做一个跳棋游戏。我已经用JButtons创建了这个板。我使用JButtons,因为我认为这是最简单的方法。我不完全确定如何实现以创建片段本身。我曾想过制作出几块JButtons,然后把一块放在正方形的顶部,但我不确定这是否可行。我也想过使用JLabels,但我不认为我可以使JLabels可点击。到目前为止我所拥有的代码。谢谢你的帮助 import java.awt.*; import javax.swing.*; public class CheckerDemo { public

我想做一个跳棋游戏。我已经用JButtons创建了这个板。我使用JButtons,因为我认为这是最简单的方法。我不完全确定如何实现以创建片段本身。我曾想过制作出几块JButtons,然后把一块放在正方形的顶部,但我不确定这是否可行。我也想过使用JLabels,但我不认为我可以使JLabels可点击。到目前为止我所拥有的代码。谢谢你的帮助

import java.awt.*;
import javax.swing.*;

public class CheckerDemo {

    public static void main(String[] args) {


        //Creates small menu with two buttons, play and exit
        JPanel second = new JPanel();
        JPanel panel = new JPanel();
        JFrame frame = new JFrame();

        //simple message asking user to choose
        JLabel hello = new JLabel("   Welcome, please choose.");

        //button for exit, closes out panel
        JButton exit = new JButton("Exit");

        //button to play, goes to the panel with board
        JButton play = new JButton("Play!");

        //add label and buttons to panel
        panel.add(exit);
        panel.add(hello);
        second.add(play);

        //so frame isn't resized, stays small
        frame.setResizable(false);
        frame.setTitle("Main");
        frame.setSize(200,250);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //put buttons in certain spots
        frame.add(panel, BorderLayout.CENTER);
        frame.add(hello, BorderLayout.NORTH);
        frame.add(second, BorderLayout.WEST);

        //exits the frame on exit button click
        exit.addActionListener(e -> {
            frame.dispose();
        });

        //play button goes to the checkerboard, uses checkerboard class
        play.addActionListener(e -> {
            frame.dispose();

            new CheckerBoard();
        });


        //button sizes
        hello.setBounds(10, 20, 80, 50);
        exit.setBounds(20,20,50,80);

        //set frame to see
        frame.setVisible(true);
    }
}
棋盘类:

import java.awt.*;
import javax.swing.*;

public class CheckerBoard extends JFrame {

    //used to make the board


    //creates the frame and panel for the new frame after play clicked
     JFrame frame2 = new JFrame();
     JPanel panel = new JPanel();

     //2d array used for black and white squares
     JButton[][] buttons = new JButton[8][8];


     //constructor
     public CheckerBoard() {
         frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame2.setSize(750,600);
         frame2.setTitle("Checkers");
         frame2.setVisible(true);
         panel.setSize(500, 500);
         JPanel panel = new JPanel(new GridLayout(8,8));


         // add squares to the board
         for (int i = 1; i < buttons.length; i++) {
             for (int j = 1; j < buttons[i].length; j++) {

                 //creates a new JButton object every time it's looped to add to the panel
                 buttons[i][j] = new JButton();

                 //if the 2d array comes across even square( ex -> [2,2]), colors it white
                 if (i % 2 == j % 2) {
                     buttons[i][j].setBackground(Color.WHITE);
                     panel.add(buttons[i][j]);
                 }
                 else  {
                     buttons[i][j].setBackground(Color.BLACK);
                     panel.add(buttons[i][j]);
                 }
             }
         }
         frame2.add(panel);
         panel.setVisible(true);
     }       
}
import java.awt.*;
导入javax.swing.*;
公共类棋盘扩展JFrame{
//用来做板子的
//单击播放后为新帧创建帧和面板
JFrame frame2=新JFrame();
JPanel面板=新的JPanel();
//用于黑白方块的二维阵列
JButton[][]按钮=新JButton[8][8];
//建造师
公共棋盘(){
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架2.设置尺寸(750600);
框架2.设置标题(“检查者”);
frame2.setVisible(true);
面板设置尺寸(500500);
JPanel面板=新JPanel(新网格布局(8,8));
//将方块添加到棋盘上
对于(int i=1;i[2,2]),则将其着色为白色
如果(i%2==j%2){
按钮[i][j].背景(颜色.白色);
面板.添加(按钮[i][j]);
}
否则{
按钮[i][j]。背景(颜色。黑色);
面板.添加(按钮[i][j]);
}
}
}
框架2.添加(面板);
面板设置可见(真);
}       
}

您可以将图像用于片段和
jbutton.setIcon(新图像图标(“图像路径”))以绘制您的作品。移动工件相当于重置和设置图标

编辑: 为黑色部分创建一个图标,为白色部分创建一个项目就足够了

Icon blackIcon = new ImageIcon("path-to-black-piece-image");
Icon whiteIcon = new ImageIcon("path-to-white-piece-image");

您可以将图像用于片段和
jbutton.setIcon(新图像图标(“图像路径”)以绘制您的作品。移动工件相当于重置和设置图标

编辑: 为黑色部分创建一个图标,为白色部分创建一个项目就足够了

Icon blackIcon = new ImageIcon("path-to-black-piece-image");
Icon whiteIcon = new ImageIcon("path-to-white-piece-image");

在游戏的早期阶段只是一个想法,自从你提到了杰拉贝尔。您希望播放的互动程序对其进行操作吗?难道不是只有真正的棋盘格才可以点击,而不是空棋盘格吗

如果播放的平铺是JLabel,背景颜色设置为适当的颜色。然后,你想在哪里有一个检查器。。。当然,有一个按钮,颜色和人们建议的一样。但你不希望你的棋盘方块是可点击的东西。对吗?如果单击棋盘格,您希望它是您执行操作的对象,而不是棋盘格

只是一些早期的投入考虑。


编辑添加:我喜欢你在这里所做的。我甚至执行了这个步骤,将您的代码加载到我的样机项目中并运行它。干得好!但说真的。。。考虑有一个正方形,这是一个检查器是一个按钮…一个空的板子空间就是一个JLabel。然后,单击团队检查器(按钮)方块来计算活动,一个空的棋盘空间就是一个空的棋盘空间(标签)。考虑到这也是另一种设计策略。

< P>只是在这个游戏早期的一个想法,而且自从你提出JPLAs。您希望播放的互动程序对其进行操作吗?难道不是只有真正的棋盘格才可以点击,而不是空棋盘格吗

如果播放的平铺是JLabel,背景颜色设置为适当的颜色。然后,你想在哪里有一个检查器。。。当然,有一个按钮,颜色和人们建议的一样。但你不希望你的棋盘方块是可点击的东西。对吗?如果单击棋盘格,您希望它是您执行操作的对象,而不是棋盘格

只是一些早期的投入考虑。


编辑添加:我喜欢你在这里所做的。我甚至执行了这个步骤,将您的代码加载到我的样机项目中并运行它。干得好!但说真的。。。考虑有一个正方形,这是一个检查器是一个按钮…一个空的板子空间就是一个JLabel。然后,单击团队检查器(按钮)方块来计算活动,一个空的棋盘空间就是一个空的棋盘空间(标签)。把它当作另一个设计策略。

你有一个按钮数组,你想把皇后放在其中一个。

JButton place = buttons[0, 4];
place.setIcon(queenIcon);
现在按钮上有女王

JLabel和JButton之间的差别很小。您可以使JLabels可单击,也可以将JButton与actionEvent一起使用

下面是一个使用JLabels的示例。(我发现JButton版本更好一些,因为它将图标居中。)

然后我们稍微改变一下位置并使静态为空

public void placeQueen(MouseEvent evt){
    JLabel label = (JLabel)evt.getSource();
    queen.setLocation(label);
}
现在女王只剩下一件了


关于使用电路板作为JLabel,然后添加块作为按钮。当你想拿起一块,这将是很容易的。单击该块。当你想放置它时,你会怎么做?我想,你仍然需要让空白区域可以点击。

你有一系列按钮,你想把女王放在其中一个按钮上

JButton place = buttons[0, 4];
place.setIcon(queenIcon);
现在按钮上有女王

JLabel和JButton之间的差别很小。您可以使JLabels可单击,也可以将JButton与actionEvent一起使用

下面是一个使用JLabels的示例。(我发现JButton版本更好一些,因为它将I