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

标签 java swing

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

相关文章:

java - 如何使用java中的开发者api获取我的微博(中国SNS)推文列表?

java - java中的空检查和监听器

java - 使用 Jenkins 启动浏览器

java - 如何将 JPanel 及其组件另存为 JPEG

java - Java中的简单动画

java对移动物体的高效重画

java - 在直线上绘制一个具有特定角度的字符串

Java:更改 UI 字体 (Nimbus) 不起作用!

java - 使用服务来显示 toast

Java swing 按钮布局尺寸不匹配