gpt4 book ai didi

java - 如何在java中的非数组网格中填充正方形?

转载 作者:行者123 更新时间:2023-12-01 19:24:13 25 4
gpt4 key购买 nike

我正在用java制作像素艺术制作器。我制作了一个如下所示的网格:

public void paint(Graphics g) {
int rows = 20;

int cols = 20;
int width = getSize().width;
int height = getSize().height;

// draw the rows
int rowHt = height / (rows);
for (int i = 0; i < rows; i++)
g.drawLine(0, i * rowHt, width, i * rowHt);

// draw the columns
int rowWid = width / (cols);
for (int i = 0; i < cols; i++)
g.drawLine(i * rowWid, 0, i * rowWid, height);

}

现在我想添加点击填充区域功能。我不知道如何填充它,因为它不是一个制作网格的数组......

非常感谢任何建议!!

最佳答案

绘画方法应该只绘画,而不是设置类的属性。例如,您应该将行/列设置为属性,然后还有一个“gridSize”属性。

那么面板的首选尺寸为:

@Override
public Dimension getPreferredSize()
{
return new Dimension(columns * gridSize, rows * gridSize);
}

这很重要,因为您不希望在调整框架大小时动态更改 rowHeight 和 columnWidth。

现在您已经有了固定大小的网格,您可以将 MouseListener 添加到面板并使用 ArrayList 来跟踪应填充的单元格。在一个简单的实现中,您可以使用 Point 对象的 ArrayList。该点将代表您单击的单元格。

例如,如果 MouseEvent 中的点是 (33, 56) 并且 gridSize 是 10,则 Point 对象将为:

Point cell = new Point(event.getX() / gridSize, event.getY() / gridSize);

将此“单元格”对象添加到您的 ArrayList 中。

然后在paintComponent()方法中,您迭代数组以获取每个点对象,现在计算要在fillRect(...)绘画方法中使用的x/y/宽度/高度值:

int x = cell.x * gridSize;
int y = cell.y * gridSize;
graphics.fillRect(x, y, gridSize, gridSize);

关于java - 如何在java中的非数组网格中填充正方形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59326660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com