Java 如何在单独的方法中使用不同的颜色重新绘制?
我正在尝试使用fillCell方法根据参数中的颜色更改颜色,但是我不知道如何利用图形更改颜色并重新绘制,我没有为此导入objectdraw。我正在尝试为我正在尝试创建的一个蛇游戏做这件事。本课程旨在绘制网格,给蛇的身体和头部上色,清除蛇的末端并给障碍物上色。到目前为止,我已经: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
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
- 给单元格一个
方法,允许它使用自己点的x、y和颜色字段来绘制自己draw(Graphics g)
- 在上面给你的类一个
,并根据需要填充它ArrayList
- 在
方法覆盖中,迭代上面的ArrayList,对ArrayList中的每个单元格调用paintComponent
draw(g)
- 我不知道你为什么让你的
方法paintComponent
,但我觉得这有点粗略,我建议你去掉这个关键词synchronized
- 仅调用
覆盖方法中的paintComponent
方法super.paintComponent(g)
- 你看过图形教程了吗?如果没有,我建议你尽快看。你可以在
“编辑:我也无法为此程序创建其他类文件。”
--这一关键信息不应该是你最初问题的一部分吗?为什么会有这个要求?这个课程是绘制/重新绘制/给网格和单元格上色的原因。我已经完成了另一个程序,它利用了大部分代码,已经有了一个自动移动的红细胞。我正在尝试使它能够重新绘制不同的颜色取决于参数。不,为什么你不能创建另一个类,像我建议的Cell类?你对你的指导老师有要求吗?如果有,请给我们看。我们的指导老师告诉我们只有6个类文件将被提交,它们是snake、SnakeOver、gamegrid、graphicsgrid、coord和snakegame。snake很明显,蛇本身可以移动并获得头/尾/身体坐标,SnakeOver命令蛇使用keylisteners移动,gamegrid在网格上移动蛇,显示边界并添加障碍物,coord是蛇可以移动的坐标,snakegame是添加网格、按钮的jpanel,及其他项目