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