Я пытаюсь создать интерактивную сетку, но цвета не изменятся, когда я нажму на квадраты. Сетка должна быть многоцветной, и при щелчке по ней ячейки внутри нее должны менять цвет на случайный из пяти цветов. Однако сетка не меняет цвета, и я не уверен, как заставить каждый объект иметь свой собственный цвет.
У меня есть квадратный класс, который создает объект в виде прямоугольника
public class square extends JPanel {
private int sizeOfSquare = 10;
private Color theColor;
private int theXindexcode;
private int theYindexcode;
public void constructSquare (Graphics g){
g.setColor(theColor);
g.drawRect(theXindexcode, theYindexcode, sizeOfSquare, sizeOfSquare);
g.fillRect(theXindexcode, theYindexcode, sizeOfSquare, sizeOfSquare);
}
square (int theXindex, int theYindex ){
sizeOfSquare = 10;
theXindexcode = theXindex;
theYindexcode = theYindex;
}
public void setTheColor(Color theColor) {
this.theColor = theColor;
}
}
У меня также есть панель для рисования с этим кодом внутри.
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;
import javax.swing.JPanel;
public class DrawingPanel extends JPanel implements ActionListener, MouseListener, MouseMotionListener {
private final int rows = 50;
private final int columns = 50;
private final int pixelsize = 10;
private final int rowIndex = 0;
private final int colIndex = 0;
private final boolean thisSquare = false;
int trackX;
int trackY;
private boolean setColor;
int [][] theGrid = new int[rows][columns];
square [][] squareArray = new square[50][50];
private int setInitialColor;
private Color either1;
public DrawingPanel() {
super();
//thisSquare = false;
this.addMouseListener(this);
//Creates a random number, if that number is greater than 5, the square in the grid will be red
//if anything else the square will be black
for (int i = 0; i < 50; i++){
for (int i2 = 0; i2 < 50; i2++){
square newSquareObject = new square(i2*10, i2*10);
squareArray[rowIndex][colIndex] = newSquareObject;
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
int whatisitX = e.getX()/10*10;
int whatisitY = e.getY()/10*10;
trackX = whatisitX;
trackY = whatisitY;
System.out.println(whatisitX +","+ whatisitY);
if(trackX>= 0 && trackX <= 500 && trackY >=0 && trackY <=500){
System.out.println(setColor);
setColor = true;
}
}
//Create 2D array for Grid
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//Loop through grid with 2D array and nested for Loop.
for (int rowIndex = 0; rowIndex <= 50; rowIndex++) {
for (int colIndex = 0; colIndex < 50; colIndex++) {
Random random = new Random();
int j = random.nextInt();
if (j >= 2) {
g.setColor(Color.white);
}
else {
g.setColor(Color.black);
}
g.drawRect(rowIndex * 10, colIndex * 10, pixelsize, pixelsize);
g.fillRect(rowIndex * 10, colIndex * 10, pixelsize, pixelsize);
//Creates border for grid
g.setColor(Color.pink);
g.drawRect(rowIndex * 10, colIndex * 10, pixelsize, pixelsize);
}
}
if (setColor == true) {
Random random = new Random();
Color thecolorsetter = Color.orange;
if (random.nextInt(5) == 0){
thecolorsetter = Color.green;
}
else if (random.nextInt(5) == 1){
thecolorsetter = Color.red;
}
else if (random.nextInt(5) == 2){
thecolorsetter = Color.yellow;
}
if (random.nextInt(5) == 3){
thecolorsetter = Color.CYAN;
}
if (random.nextInt(5) == 4){
thecolorsetter = Color.MAGENTA;
}
squareArray[trackX][trackY].setTheColor(thecolorsetter);
repaint();
}
}
@Override
public void actionPerformed(ActionEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
public int getRowIndex() {
return rowIndex;
}
public int getColIndex() {
return colIndex;
}
}
Я попытался создать панель рисования с помощью rando