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

时间:2015-03-10 16:51:20

标签: java swing graphics repaint

我正在尝试使用我的fillCell方法能够根据参数中放置的颜色更改颜色,但是我不知道如何利用图形来更改颜色并重新绘制它并且我不导入objectdraw for这个。我正在尝试为我想要创建的蛇游戏做这件事。该课程旨在绘制网格,为蛇的身体和头部着色,以及清除蛇的末端并为障碍物着色。到目前为止我有:

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();
    }

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

1 个答案:

答案 0 :(得分:2)

Graphics g = new Graphics();图形是一个抽象类,因此这将无法工作。

建议:

  • 创建一个Cell类,给它一个Point和一个Color字段以及它需要的任何其他字段,并为它提供所需的任何getter / setters /构造函数。
  • 给单元格一个draw(Graphics g)方法,允许它使用自己的Point x和y以及Color字段绘制自己。
  • 将您的课程置于ArrayList<Cell>之上并根据需要填写。
  • paintComponent方法覆盖中,遍历上面的ArrayList,在ArrayList中的每个Cell上调用draw(g)
  • 我不确定你为什么要制作paintComponent方法synchronized,但这看起来有些粗略,我建议你摆脱那个关键词。
  • 仅在super.paintComponent(g)覆盖方法中调用paintComponent方法。
  • 您是否浏览过图形教程?如果不是,我建议你尽快这样做。您可以在this link找到它们。