У меня проблема с использованием MouseListener
для изменения цвета панели, которая среди многих других подобных панелей в строках и столбцах.Это мой прогресс на данный момент:
import java.awt.*;
import javax.swing.*;
import java.awt.Color.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.util.Random;
public class Checkers extends JFrame implements MouseListener
{
Random random = new Random();
private final int ROWS = 2;
private final int COLS = 5;
private final int GAP = 2;
private final int NUM = ROWS * COLS;
private int x;
private JPanel pane = new JPanel(new GridLayout(ROWS,COLS, GAP,GAP));
private JPanel pane2 = new JPanel();
private JPanel [] panel = new JPanel[NUM];
private Color col1 = Color.RED;
private Color col2 = Color.WHITE;
private Color tempColor;
public Checkers()
{
super("Checkers");
setSize(600,600);
setVisible(true);
addMouseListener(this);
mouseClicked(null);
setBackground(Color.BLACK);
setBoard();
}
public void setBoard()
// rotates colors on the checkbaord
{
for(int x = 0; x < NUM; x++) {
panel[x] = new JPanel();
pane.add(panel[x]);
if (x % COLS == 0) {
tempColor = col1;
col1 = col2;
col2 = tempColor;}
if (x % 2 == 0) {
panel[x].setBackground(col1);}
else {
panel[x].setBackground(col2);}
}
//pane background colour and the size of this pane.
pane.setBackground(Color.BLACK);
pane.setPreferredSize(new Dimension(300,300));
//pane background colour and size of this pane.
pane2.setBackground(Color.BLACK);
pane2.setPreferredSize(new Dimension(300,300));
//directions on the board where these panes appear.
add(pane, BorderLayout.WEST);
add(pane2, BorderLayout.EAST);
pane2.setLayout(new BoxLayout(pane2, BoxLayout.PAGE_AXIS));
}
@Override
public void mouseClicked(MouseEvent arg0) {
//randomly generate a new color for one of the panes when that pane is clicked.
int r = random.nextInt(255);
int g = random.nextInt(255);
int b = random.nextInt(255);
setBackground(new Color(r, g, b));
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
}
Ожидаемый результат - Что я хотел бы сделать с этим, как только одна из красных или белых панелей нажата, она вызывает mouseClicked
переопределяет и устанавливает цвет этой панели черным (в настоящее время установлен случайный rgb, но все равно не работает), так что пользователь знает, что это было нажато.Остальные переопределения оставлены пустыми, так как в данный момент они мне не нужны.
Текущий результат - Программа выполняется, но цвета панели не меняются после щелчка.
Вот файл прямого изображения того, как программа выглядит в данный момент:
Любая помощь приветствуется.