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

Java 如何在单独的方法中使用不同的颜色重新绘制?,java,swing,graphics,repaint,Java,Swing,Graphics,Repaint,我正在尝试使用fillCell方法根据参数中的颜色更改颜色,但是我不知道如何利用图形更改颜色并重新绘制,我没有为此导入objectdraw。我正在尝试为我正在尝试创建的一个蛇游戏做这件事。本课程旨在绘制网格,给蛇的身体和头部上色,清除蛇的末端并给障碍物上色。到目前为止,我已经: import java.awt.*; import java.util.ArrayList; import javax.swing.*; import java.awt.event.*; public class Gra

我正在尝试使用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();
    }
import java.awt.*;
导入java.util.ArrayList;
导入javax.swing.*;
导入java.awt.event.*;
公共类GraphicsGrid扩展了JPanel
{
私有数组列表单元格;
私人int wid、hei、pix;
/**
*创建arraylist并设置默认宽度、高度和像素
*为了一个网格。
*/
公共图形网格(){
fillCells=新的ArrayList();
wid=400;
hei=400;
pix=10;
}
/**
*创建arraylist并设置输入的宽度、高度和像素
*为了一个网格。
*@param width网格宽度的大小
*@param height网格高度的大小
*@param每个单元的像素大小
*/ 
公共图形网格(整数宽度、整数高度、整数像素){
fillCells=新的ArrayList();
wid=宽度;
hei=高度;
pix=像素;
}
/**
*填充和绘制当前单元格,并使用线创建栅格
*@param g创建已导入图形的实例
*/
@凌驾
受保护的组件(图形g){
超级组件(g);
用于(点填充单元:填充单元){
int-cellX=(fillCell.x*pix);
int cellY=(fillCell.y*pix);
g、 setColor(Color.GREEN);
g、 fillRect(cellX,cellY,pix,pix);
}
g、 设置颜色(颜色为黑色);
g、 drawRect(0,0,宽*pix,高*pix);
对于(int i=0;i

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

Graphics g=new Graphics();
Graphics是一个抽象类,因此这永远不会起作用

建议:

  • 创建一个Cell类,给它一个Point和Color字段以及它需要的任何其他字段,并给它任何它需要的getter/setter/constructor
  • 给单元格一个
    draw(Graphics g)
    方法,允许它使用自己点的x、y和颜色字段来绘制自己
  • 在上面给你的类一个
    ArrayList
    ,并根据需要填充它
  • paintComponent
    方法覆盖中,迭代上面的ArrayList,对ArrayList中的每个单元格调用
    draw(g)
  • 我不知道你为什么让你的
    paintComponent
    方法
    synchronized
    ,但我觉得这有点粗略,我建议你去掉这个关键词
  • 仅调用
    paintComponent
    覆盖方法中的
    super.paintComponent(g)
    方法
  • 你看过图形教程了吗?如果没有,我建议你尽快看。你可以在

“编辑:我也无法为此程序创建其他类文件。”
--这一关键信息不应该是你最初问题的一部分吗?为什么会有这个要求?这个课程是绘制/重新绘制/给网格和单元格上色的原因。我已经完成了另一个程序,它利用了大部分代码,已经有了一个自动移动的红细胞。我正在尝试使它能够重新绘制不同的颜色取决于参数。不,为什么你不能创建另一个类,像我建议的Cell类?你对你的指导老师有要求吗?如果有,请给我们看。我们的指导老师告诉我们只有6个类文件将被提交,它们是snake、SnakeOver、gamegrid、graphicsgrid、coord和snakegame。snake很明显,蛇本身可以移动并获得头/尾/身体坐标,SnakeOver命令蛇使用keylisteners移动,gamegrid在网格上移动蛇,显示边界并添加障碍物,coord是蛇可以移动的坐标,snakegame是添加网格、按钮的jpanel,及其他项目