저는 자바에서 큰 신인이에요. 과제를 수행하기 위해 지뢰 찾기 게임을 만들려고 노력 중이며 아직 베타 단계입니다. 그러나 버튼을 누르면 광산을 "0"으로 표시하는 방법에 대해 고민하고 있습니다. 2d 배열을 사용하여 Jbutton을 만들었지 만 원하는 특정 단추에 "0"을 넣을 수 없습니다.눌렀을 때 Jbutton에 텍스트를 설정하십시오.
여기 내 코드가 있습니다 (추악함/가능한 비 효율성을 용서해주십시오). GUI와 관련하여 정말 우둔합니다.
import java.awt.*;
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
public class Grid extends JPanel {
// Initializes rows,columns and mines
int rows = 10;
int cols = 10;
int i, j = 0;
int mines = 10;
boolean[][] setmine = new boolean[rows][cols];
boolean[][] clickable = new boolean[rows][cols];
private JToggleButton squares[][], squares2[][];
// Contructor for creating a grid(with default size 400x400
public Grid() {
this.setSize(600, 600);
this.setLayout(new GridLayout(rows, cols));
squares = new JToggleButton[rows][cols];
buildButtons();
}
private void buildButtons() {
// loops are used for creating the "buttons" on the grid.
int MinesNeeded = 10;
// builds buttons
// ----------------------------------------
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
squares[i][j] = new JToggleButton();
// squares[i][j].setEnabled(false);
squares[i][j].setSize(600, 600);
// --------------------------------------------------
// This part randomises the mines
// -----------------------------------------------------
while (MinesNeeded > 0) {
int x = (int) Math.floor(Math.random() * rows);
int y = (int) Math.floor(Math.random() * cols);
if (!setmine[x][y]) {
setmine[x][y] = true;
MinesNeeded--;
}
}
// ----------------------------------------------------------------------------
this.add(squares[i][j]);
if (setmine[i][j] == true) {
squares[i][j].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// this is the problem
squares[i][j].setText("0");
}
});
}
}
}
}
public static void main(String[] args) {
Grid g = new Grid();
JFrame frame = new JFrame("Minesweeper");
frame.add(g);
frame.setSize(600, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}