【问题标题】:Undo and move functions with freehand drawing使用手绘图撤消和移动功能
【发布时间】:2012-11-14 19:40:51
【问题描述】:

我目前正在尝试编写一个 Java 应用程序,该应用程序将允许徒手绘图,然后可以移动和删除每个绘制的曲线。

我猜我最好的选择是让每次点击和拖动都创建一个单独的实体,但我不知道如何实现这一点。到目前为止,我只有一个小的 JFrame,它将在 Oracle 教程的帮助下显示一个“画笔”,但甚至没有这个画笔绘制的线条。

class MyPanel extends JPanel {

    private int ovalX = 50;
    private int ovalY = 50;

    public MyPanel() {
        setBorder(BorderFactory.createLineBorder(Color.black));

        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                moveSquare(e.getX(),e.getY());
            }
        });

        addMouseMotionListener(new MouseAdapter() {
            public void mouseDragged(MouseEvent e) {
                moveSquare(e.getX(),e.getY());
            }
        });
    }

    private void moveSquare(int x, int y) {
        int OFFSET = 1;
        if ((ovalX!=x) || (ovalY!=y)) {
            ovalX=x;
            ovalY=y;
            repaint();
        } 
    }

    public Dimension getPreferredSize() {
        return new Dimension(250,200);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);       


        g.setColor(Color.BLACK);
        g.fillOval((ovalX - 5),(ovalY - 5),10,10);
    }  
}

我不知道该如何继续。我应该先阅读一些通用教程吗?如果是这样,在什么主题上?

【问题讨论】:

  • “我猜我最好的选择是让每次点击和拖动都创建一个单独的实体,但我不知道如何实现。” 不要忘记用于生成图形的ColorStrokeRenderingHints 等。这比你想象的要艰难。在为 paint undo/redo functionality 创建其中许多内容的可序列化版本的过程中途完成后,我决定创建结果的 BufferedImage 并存储它会更容易。
  • 我的想法很理想,是的,存储某种曲线的光栅图像,而不是存储它的所有点和属性。那么,我会注意查看一些 BufferedImage 教程。

标签: java swing animation graphics paintcomponent


【解决方案1】:

关于不同主题的内容很少有帮助。一些核心/基本的将包括

我建议你需要欣赏

我会抛出 Creating a GUI With JFC/Swing,因为它讨论了诸如键绑定和鼠标侦听器之类的事情。

我也会熟悉Working with Images,因为毫无疑问您也会想要保存和加载图像

【讨论】:

  • 啊,是的,第一个是让我走到这一步的原因。感谢您的帮助,我一定会检查其他人。
猜你喜欢
  • 1970-01-01
  • 2013-01-26
  • 2017-07-19
  • 2016-11-12
  • 2015-08-12
  • 2013-01-27
  • 1970-01-01
  • 2021-08-05
  • 2018-11-14
相关资源
最近更新 更多