如何在单独的方法中使用不同的颜色重新绘制



我正在尝试使用我的fillCell方法,以便能够根据参数中输入的颜色更改颜色,但是我不知道如何利用图形来更改颜色并重新绘制它,我没有为此导入ObjectDraw。我正在尝试为我正在尝试创建的贪吃蛇游戏执行此操作。该课程旨在绘制网格,为蛇的身体和头部着色,以及清除蛇的末端并为障碍物着色。到目前为止,我有:

import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;
import java.awt.event.*;
public class GraphicsGrid extends JPanel
{
    private ArrayList<Point> fillCells;
    private int wid, hei, pix;
/**
 * Creates an arraylist and sets the default width, height and pixel
 * for a grid.
 */
    public GraphicsGrid() {
        fillCells = new ArrayList<Point>();
        wid = 400;
        hei = 400;
        pix = 10;
    }
/**
 * Creates an arraylist and sets the inputted width, height and pixel
 * for a grid.
 * @param width size of the width for the grid
 * @param height size of the height for the grid
 * @param pixel size for each cell 
 */ 
    public GraphicsGrid(int width, int height, int pixel) {
        fillCells = new ArrayList<Point>();
        wid = width;
        hei = height;
        pix = pixel;
    }
/**
 * fills and paints the current cell and creates the grid with lines
 * @param g creates an instance of graphics that has been imported
 */
    @Override
    protected synchronized void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (Point fillCell : fillCells) {
            int cellX = (fillCell.x * pix);
            int cellY = (fillCell.y * pix);
            g.setColor(Color.GREEN);
            g.fillRect(cellX, cellY, pix, pix);
        }
        g.setColor(Color.BLACK);
        g.drawRect(0, 0, wid*pix, hei*pix);    
        for (int i = 0; i < wid*pix; i += pix) {
            g.drawLine(i, 0, i, hei*pix);
        }    
        for (int i = 0; i < hei*pix; i += pix) {
            g.drawLine(0, i, wid*pix, i);
        }
    }
/* *
 * adds a point to the cell and repaints the cell
 * @param x x-coordinate of the cell
 * @param y y-coordinate of the cell
 */
    public void fillCell(int x, int y, Color block) {
        Graphics g = new Graphics();
        super.paintComponent(g);
        fillCells.add(new Point(x, y));
        if(block.equals("black"))
        {
            g.setColor(Color.BLACK);
            repaint();
        }
        else if(block.equals("red"))
        {
            g.setColor(Color.RED);
            repaint();
        }
        else if(block.equals("white"))
        {
            g.setColor(Color.WHITE);
            repaint();
        }
        else
        {
            g.setColor(Color.Green);
            repaint();
        }
        repaint();
    }

我也无法为此程序创建另一个类文件。

Graphics g = new Graphics();图形

是一个抽象类,所以这永远不会起作用。

建议:

  • 创建一个 Cell 类,为其指定一个点和一个颜色字段以及它需要的任何其他字段,并为其提供所需的任何 getter/setter/constructor。
  • 给 Cell 一个draw(Graphics g)方法,允许它使用自己的点的 x 和 y 以及颜色字段绘制自己。
  • 给你的班级一个以上ArrayList<Cell>,并根据需要填写。
  • paintComponent 方法重写中,循环访问上面的 ArrayList,对 ArrayList 中的每个 Cell 调用 draw(g)
  • 我不确定你为什么要把你的paintComponent方法synchronized但对我来说这看起来有点粗略,我建议你去掉这个关键词。
  • 仅在paintComponent重写方法中调用 super.paintComponent(g) 方法。
  • 你看过图形教程吗?如果没有,我建议你尽快这样做。您可以在此链接中找到它们。

相关内容

  • 没有找到相关文章

最新更新