在构造函数中设置currentColor后,当调用paintComponent时,它会更改回原始值

时间:2014-04-20 06:07:45

标签: java swing jpanel paintcomponent

我一直在看这个,但没有意义。当我启动程序时,我使用来自我的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对我来说并不是一种强有力的语言。

0 个答案:

没有答案