我遇到这个问题,我的网格打印得很好,当我突出显示一个框时,它变成了我想要的颜色,但是当单击其中一个框时,它并没有变成红色,而且我似乎无法找出为什么有人可以提供帮助的原因:)
请确保查看InBoxX(),InBoxY()函数以及MouseClicked和Board类中的循环,该循环将输出所有内容。
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public class GUI extends JFrame {
public int mx = -100;
public int my = -100;
int spacing = 2;
public boolean[][] Nodes = new boolean[32][18];
public GUI(){
this.setTitle("Test");
this.setSize(1286 , 829);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(false);
Board board = new Board();
this.setContentPane(board);
Move move = new Move();
this.addMouseMotionListener(move);
Click click = new Click();
this.addMouseListener(click);
}
public class Board extends JPanel {
public void paintComponent(Graphics g){
g.setColor(Color.DARK_GRAY);
g.fillRect(0 , 0 , 1280 , 800);
for ( int i = 0 ; i < 32 ; i++){
for (int j = 0 ; j < 18 ; j++){
Nodes[i][j] = false;
if(Nodes[i][j] == true){
g.setColor(Color.red);
}
g.setColor(Color.gray);
if( mx >= spacing+i*40 && mx < spacing+i*40+40-spacing &&
my >= spacing+j*40+40+26 &&
my < spacing+j*40+26+40+40-2*spacing ){
g.setColor(Color.yellow);
}
g.fillRect(spacing+i*40, spacing+j*40+40, 40-2*spacing, 40-2*spacing);
}
}
}
}
public class Move implements MouseMotionListener {
@Override
public void mouseDragged(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent e) {
mx = e.getX();
my = e.getY();
}
}
public class Click implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
if(InBoxX() != -1 && InBoxY() != -1){
Nodes[InBoxX()][InBoxY()] = true;
System.out.println("Clicked");
}
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public int InBoxX(){
for ( int i = 0 ; i < 32 ; i++){
for( int j = 0 ; j < 18 ; j++){
if(mx >= spacing+i*40 && mx < spacing+i*40+40-spacing &&
my >= spacing+j*40+40+26 &&
my < spacing+j*40+26+40+40-2*spacing){
return i;
}
}
}
return -1;
}
public int InBoxY(){
for ( int i = 0 ; i < 32 ; i++){
for (int j = 0 ; j< 18 ; j++){
if(mx >= spacing+i*40 && mx < spacing+i*40+40-spacing &&
my >= spacing+j*40+40+26 &&
my < spacing+j*40+26+40+40-2*spacing){
return j;
}
}
}
return -1;
}
}
}
这是因为缺少更好的词:messy。一些要点:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test {
public int mx = -100;
public int my = -100;
int spacing = 2;
public boolean[][] Nodes = new boolean[32][18];
Board board;
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Test();
}
});
}
public Test() {
JFrame frame = new JFrame("Test");
frame.setSize(1286 , 829);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(false);
board = new Board();
frame.add(board);
Move move = new Move();
frame.addMouseMotionListener(move);
Click click = new Click();
frame.addMouseListener(click);
}
@SuppressWarnings("serial")
public class Board extends JPanel {
public void paintComponent(Graphics g){
g.setColor(Color.DARK_GRAY);
g.fillRect(0 , 0 , 1280 , 800);
for (int i = 0 ; i < 32 ; i++) {
for (int j = 0 ; j < 18 ; j++) {
//Nodes[i][j] = false;
g.setColor(Color.gray);
if(mx >= spacing + i*40 &&
mx < spacing + i*40 + 40 - spacing &&
my >= spacing + j*40 + 40 + 26 &&
my < spacing + j*40 + 26 + 40 + 40 - 2*spacing ) {
g.setColor(Color.red);
}
g.fillRect(spacing+i*40, spacing+j*40+40, 40-2*spacing, 40-2*spacing);
}
}
}
}
public class Move implements MouseMotionListener {
@Override
public void mouseDragged(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent e) {
mx = e.getX();
my = e.getY();
}
}
public class Click implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
if(InBoxX() != -1 && InBoxY() != -1){
Nodes[InBoxX()][InBoxY()] = true;
System.out.println("Clicked");
board.repaint();
}
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public int InBoxX() {
for ( int i = 0 ; i < 32 ; i++){
for( int j = 0 ; j < 18 ; j++){
if(mx >= spacing+i*40 && mx < spacing+i*40+40-spacing &&
my >= spacing+j*40+40+26 &&
my < spacing+j*40+26+40+40-2*spacing){
return i;
}
}
}
return -1;
}
public int InBoxY(){
for ( int i = 0 ; i < 32 ; i++){
for (int j = 0 ; j< 18 ; j++){
if(mx >= spacing+i*40 && mx < spacing+i*40+40-spacing &&
my >= spacing+j*40+40+26 &&
my < spacing+j*40+26+40+40-2*spacing){
return j;
}
}
}
return -1;
}
}
}