首页 > 解决方案 > 如何实现可缩放的绘图区域?

问题描述

情况:我实现了一个 Java Swing 应用程序,它截取现有程序中选定的组件并将其显示在新框架中。显示后,您可以绘制矩形、圆形和生成文本框。

我的程序由一个绘图组件组成,该组件位于通过通过绘制的框架内。paintComponent()方法。更具体地说,我绘制了两张缓冲图像,一张用于图像本身,另一张用于存储图纸。

@Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        // Scale
        int newWidth = (int) (image.getWidth(null) * zoom);
        int newHeight = (int) (image.getHeight(null) * zoom);

        // Display image and drawing
        g.drawImage(image, 0, 0, newWidth, newHeight, null);
        g.drawImage(drawImage, 0, 0, newWidth, newHeight, null);
    }

形状本身是在上面看到的drawImage上绘制的。要在图像上绘图,我使用抽屉变量:drawer = (Graphics2D) drawImage.getGraphics();

private void drawRectangle(boolean fill, Point scaledNow) {
        if (fill) {
            drawer.fillRect(
                    // X-coordinate
                    (int) (Math.min(scaledNow.getX(), lastClick.getX())),
                    // Y-coordinate
                    (int) (Math.min(scaledNow.getY(), lastClick.getY())),
                    // width
                    (int) (Math.abs(scaledNow.getX() - lastClick.getX())),
                    // height
                    (int) (Math.abs(scaledNow.getY() - lastClick.getY())));
        }
        else {
            drawer.drawRect(
                    // X-coordinate
                    (int) Math.min(scaledNow.getX(), lastClick.getX()),
                    // Y-coordinate
                    (int) Math.min(scaledNow.getY() , lastClick.getY()),
                    // width
                    (int) Math.abs(scaledNow.getX() - lastClick.getX()),
                    // height
                    (int) Math.abs(scaledNow.getY() - lastClick.getY()));
        }
    }

问题:我正在尝试实现一个撤消按钮,该按钮根据此示例删除最新的形状。撤消示例

为了直接在组件上绘图,据我所知,我必须自己进行所有缩放,但是当我保持当前的方法时,撤消示例中提到的方法不起作用。

我应该如何处理自己绘制的图像上的绘图?

标签: javaswing

解决方案


推荐阅读