java - 使用drawRect时图形太慢

标签 java performance awt drawrect

我正在制作一个画板,我有几个问题。

  1. 每当我尝试在其上绘图时,它都不会自动更新。我通常必须调整屏幕大小才能更新。
  2. 我怎样才能做一些类似 mouseDragged 函数的事情,在其中我可以不断获取 x 和 y 坐标?

这是代码:

import java.awt.geom.*;
class griddedInput extends JComponent implements MouseListener
{
    int SIZE = 10;
    int scSize = 300;
    int sSize = scSize/SIZE;
    boolean [][] grid = new boolean[sSize][sSize];
    public griddedInput(boolean grid[][])
    {
        grid=grid;
        setPreferredSize(new Dimension(scSize,scSize));
        addMouseListener(this);
    }
    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;
        int x, y;
        for(y = 0; y < sSize; y ++) {
            for(x = 0; x < sSize; x ++) {
                if(grid[y][x])
                    g2.setColor(Color.BLACK);
                else
                    g2.setColor(Color.WHITE);
                g2.fillRect((x * SIZE), (y * SIZE), sSize, sSize);
            }
        }
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        int squareX = (int)e.getX() / SIZE;
        int squareY = (int)e.getY() / SIZE;
        grid[squareY][squareX] = !grid[squareY][squareX];
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
    }
}

最佳答案

每当您想建议 JVM 绘制绘图组件时,您都需要在绘图组件上调用 repaint() —— 最有可能在您的 MouseListener 方法中。

例如,

@Override
public void mouseClicked(MouseEvent e) {
    int squareX = (int)e.getX() / SIZE;
    int squareY = (int)e.getY() / SIZE;
    grid[squareY][squareX] = !grid[squareY][squareX];
    repaint();
}

为了加快重绘速度,您还可以调用重载方法,该方法允许您重绘 GUI 的选定矩形,但我敢打赌,您不需要为此 GUI 执行此操作。

如果您希望其他人能够更好地理解代码并为您提供帮助,那么您还需要在代码缩进方面少一些“创意”。

编辑
关于:

2.How can I do something like a mouseDragged function, in which i can continually get the x and y coords?

还添加一个 MouseMotionListener。它可以是同一个类,事实上,我通常为此使用一个匿名内部类,一个扩展了 MouseAdapter,并且我将其单个实例用于 MouseListener 和 MouseMotionListener。我在这个论坛的几篇帖子中都有使用它的示例。

关于java - 使用drawRect时图形太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10792192/

相关文章:

java - 我收到错误 java.text.ParseException : Unparseable date

java - 有没有一种方法可以显示文件中的所有内容,因为它使用单个字符串对象

java - 为什么我的链接列表在克隆后似乎指向相同的东西?

performance - 尝试着名的分支预测示例有时会导致奇怪的时间

java - 可滚动 JPanel 中的 Swing 流布局中断元素

java - 多个事件派发线程

java - 将 Apache Mahout 与 Ruby on Rails 结合使用

python - 全局变量与局部变量的性能

java - Python(和Java)中最快的数据打包

java - 当两个文本字段为空时禁用按钮