我正在用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/59328550/