Как нарисовать цифры на панели в 2d массиве для игрового поля - PullRequest
1 голос
/ 05 февраля 2012

Как нарисовать числа на панели в 2d массиве для игрового поля?

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

Я бы хотел нумеровать панели так, как показано здесь .

Ответы [ 2 ]

3 голосов
/ 05 февраля 2012

Резюме: Вы должны добавить ярлык для каждой из ваших панелей, который отображает номер.

Пара очков:

  1. Если ваш класс расширяет JFrame, вам не нужно иметь его в качестве переменной-члена.
  2. Не ясно, что вы устанавливаете свой фрейм в любом месте (возможно, вы просто не включили этот код в ваш пример. Я поднимаю это, потому что пока нет описания того, что на самом деле не так) с вашим кодом - так что, возможно, это просто показ, поэтому setVisible(true) было бы важно.
  3. Если вы хотите добавить числа, вам нужно добавить 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 голос
/ 28 ноября 2015

Это ваша программа:

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

}
...