如何在游戏板的二维阵列中将数字绘制到面板上?
import javax.swing.*;
import java.awt.*;
public class board2 extends JFrame {
JFrame frame;
JPanel squares[][] = new JPanel[10][10];
public board2() {
setSize(500, 500);
setLayout(new GridLayout(10, 10));
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
squares[i][j] = new JPanel();
if ((i + j) % 2 == 0) {
squares[i][j].setBackground(Color.black);
} else {
squares[i][j].setBackground(Color.white);
}
add(squares[i][j]);
}
}
}
}
我想按照here显示的方式对面板进行编号。
答案 0 :(得分:3)
摘要:您应该为显示该数字的每个面板添加标签。
几点:
JFrame
,则您不需要将其作为成员变量。setVisible(true)
很重要。JLabel
。让这些JLabel
实例的前景交替前景会很好。您可以使用i
和j
计数器来计算广场的数字来创建标签。将编号机制封装在一个单独的方法中会很好,因为您已经注意到规范要求交替行从左侧或右侧计数。如下所示:
JLabel label = new JLabel(getCellNumber(((i*10)+j),10) + "");
然后getCellNumber()
方法的原始版本看起来像这样:
private int getCellNumber(int id, int columnCnt) {
int rowID = (id) / columnCnt;
int colID = (id) % columnCnt;
if (rowID %2 == 1) {
colID = columnCnt - colID;
} else {
colID++;
}
return 101 - ((rowID * columnCnt) + colID);
}
答案 1 :(得分:1)
这是你的计划:
import javax.swing.*;
import java.awt.*;
public class ChessBoard extends JFrame {
JFrame frame;
JPanel squares[][] = new JPanel[10][10];
public ChessBoard() {
setName("Chess Board");
setSize(500, 500);
setLayout(new GridLayout(10, 10));
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
JLabel label = new JLabel(getCellNumber(((i*10)+j),10) + "");
JPanel panel = new JPanel();
panel.add(label);
squares[i][j] = panel;
if ((i + j) % 2 == 0) {
squares[i][j].setBackground(Color.black);
label.setForeground(Color.white);
} else {
squares[i][j].setBackground(Color.white);
label.setForeground(Color.black);
}
add(squares[i][j]);
}
}
setVisible(true);
}
public static void main(String [] args){
new ChessBoard();
}
private int getCellNumber(int id, int columnCnt) {
int rowID = (id) / columnCnt;
int colID = (id) % columnCnt;
if (rowID %2 == 1) {
colID = columnCnt - colID;
} else {
colID++;
}
return 101 - ((rowID * columnCnt) + colID);
}
}