Java 在构造函数中设置currentColor后,调用paintComponent时,它会变回其原始值

Java 在构造函数中设置currentColor后,调用paintComponent时,它会变回其原始值,java,swing,jpanel,paintcomponent,Java,Swing,Jpanel,Paintcomponent,我已经看了一段时间了,它没有任何意义。当我启动程序时,我在另一个文件中使用主函数的SetupLawn调用将矩形网格的背景色设置为特定颜色。那部分很好用。然后,当我稍后尝试使用新颜色再次调用SetupLawn函数来更改颜色时,它不会更改。我在SetupLawn函数中输入了prints,我传递的颜色正确地到达了那里,但是一旦调用了paintComponent,currentColor的值就会恢复到原来的值。我还通过调试打印验证了这一点 import javax.swing.*; import jav

我已经看了一段时间了,它没有任何意义。当我启动程序时,我在另一个文件中使用主函数的SetupLawn调用将矩形网格的背景色设置为特定颜色。那部分很好用。然后,当我稍后尝试使用新颜色再次调用SetupLawn函数来更改颜色时,它不会更改。我在SetupLawn函数中输入了prints,我传递的颜色正确地到达了那里,但是一旦调用了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));
                }
            }
        }
    }
}

我现在明白了为什么这个方法不是个好主意。当我在做这个的时候,已经是深夜了,Java对我来说不是一种强大的语言。

你说的“再次调用SetupLawn函数”是什么意思<代码>设置草坪是一个类。你是说你正在创建它的第二个实例吗?您如何显示面板?正如@DavidWallace已经暗示的,您的调用代码是什么样子的?在这段代码中,我可以建议为颜色添加一个setter。为什么要将嵌套类与外部类
Lawn
一起使用?这是一项正在进行的工作。我想在某一点上,我在lawn中有其他函数,但我有“非静态字段不能从静态上下文引用”的错误。我最初尝试做的就是在草坪内部创建一个setColor函数。这就是我现在正在做的工作,了解这个错误,并以这种方式尝试一切。我只是觉得我刚刚设置并打印的值在paintComponent之后变为其他值是不寻常的。编辑原始值以回答您的问题。这是否已解决,或者您仍然需要帮助?
Lawn.SetupLawn lawn = new Lawn.SetupLawn(spring);