画的矩形没有出现

时间:2013-09-28 15:24:55

标签: java swing jlabel paintcomponent mouselistener

我已经尝试了很长一段时间才能完成这项工作并做了大量的研究,但我无法弄清楚为什么它没有发生:我的最终目标是通过y绿色正方形得到x的网格,并且当你点击一个正方形时,它会改变颜色。 (这是一个更大项目的一部分)

现在我知道这可能是一种非常低效的方式,但我尝试了不同的方式,似乎没有任何工作。

在我的Grid课程中,我有这个:

    squares = new Square[width][height];
 for (int i = 0; i < width; i++){
    for (int j = 0; j < height; j++){
        squares[i][j] = new Square(i,j);
        frame.getContentPane().add(squares[i][j]);
    }
}

这是我的Square课程:

public class Square extends JLabel implements MouseListener{

private int x,y,width,height, mouseX,mouseY;
private Color colour = Color.GREEN;


public Square(int width, int height){
this.x = width*45;
this.y = height*45;
addMouseListener(this);
this.setBounds(x, y, 45, 45);
}

public void paintComponent(Graphics g){
   Graphics2D g2 = (Graphics2D) g;
   g2.setColor(colour);
   g2.fillRect(x, y, 45, 45);
}

@Override
public void mouseClicked(MouseEvent e) {
    mouseX = e.getX();
    mouseY = e.getY();
    if(mouseX > x && mouseX < x+45 && mouseY > y && mouseY < y+45){
    if(colour.equals(Color.GREEN)){
        colour = Color.RED;
    } else{
        colour = Color.GREEN;
    }
    repaint();
    }
}

}

然而,当我运行代码时,我看到的只是第一个方块和最后一个方块;怎么来的?

如果您有任何关于如何更有效地完成此任务的提示,请告诉并批评此代码。

1 个答案:

答案 0 :(得分:0)

解决您的问题。您需要在某些地方更改代码。

1)您不需要使用Square()构造函数传递x,y坐标。像这样声明空构造函数:

 public Square() {
        addMouseListener(this);
        this.setBounds(x, y, 45, 45);
 }

2)将GridLayout设置为JFrame。

  frame.setLayout(new GridLayout(width, height));

3)在循环中调用空构造函数。

 Square[][] squares = new Square[width][height];
    for (int i = 0; i < width; i++) {
        for (int j = 0; j < height; j++) {
            squares[i][j] = new Square();
            frame.add(squares[i][j]);
        }
    }