如何将数字绘制到游戏板的二维阵列中的面板上

时间:2012-02-05 00:54:15

标签: java swing layout-manager

如何在游戏板的二维阵列中将数字绘制到面板上?

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显示的方式对面板进行编号。

2 个答案:

答案 0 :(得分:3)

摘要:您应该为显示该数字的每个面板添加标签。

几点:

  1. 如果您的班级延伸JFrame,则您不需要将其作为成员变量。
  2. 很明显,你的框架在任何地方都可以看到(也许你只是在你的例子中没有包含那些代码。我正在提出这个问题,因为到目前为止你的代码并没有声明什么是错误的) - 所以也许它只是出现,所以setVisible(true)很重要。
  3. 如果您想添加数字,则需要在迭代时向每个人添加JLabel。让这些JLabel实例的前景交替前景会很好。您可以使用ij计数器来计算广场的数字来创建标签。
  4. 将编号机制封装在一个单独的方法中会很好,因为您已经注意到规范要求交替行从左侧或右侧计数。如下所示:

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

}