我一直在看这个,但没有意义。当我启动程序时,我使用来自我的main函数的SetupLawn调用在另一个文件中将矩形网格的背景颜色设置为特定颜色。那部分工作正常。然后,当我尝试通过再次使用新颜色调用SetupLawn函数来更改颜色时,它不会更改。我在LayoutLawn函数中放置了打印件,并且我传递的颜色正确到达,但是一旦调用了paintComponent,currentColor的值就会恢复到原来的状态。我也用调试打印验证了这一点。
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
public class Lawn
{
public static class SetupLawn extends JPanel
{
private List<Point> lawn;
Color currentColor;
public SetupLawn(Color color)
{
lawn = new ArrayList<>(25);
currentColor = color;
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
for (Point cell : lawn)
{
int cellX = cell.x;
int cellY = cell.y;
g.setColor(currentColor);
g.fillRect(cellX, cellY, 50, 50);
}
//Set grid color and draw border
g.setColor(Color.BLACK);
g.drawRect(10, 10, 800, 500);
for (int i = 10; i <= 800; i += 50)
{
g.drawLine(i, 10, i, 510);
}
for (int i = 10; i <= 500; i += 50)
{
g.drawLine(10, i, 810, i);
}
for (int i = 60; i <= 750; i += 50)
{
for (int j =60; j <= 450; j += 50)
{
lawn.add(new Point(i, j));
}
}
}
}
}
这就是我打电话的方式。
Lawn.SetupLawn lawn = new Lawn.SetupLawn(spring);
我现在可以看到为什么这种方法不是一个好主意。当我正在研究这个问题的时候真的是深夜,Java对我来说并不是一种强有力的语言。