【问题标题】:How to scale only one object on JPanel using affine transform?如何使用仿射变换在 JPanel 上仅缩放一个对象?
【发布时间】:2014-01-12 19:37:06
【问题描述】:

我有一个 Canvas 类,它是 JPanel 的扩展。我需要在其上绘制多个自定义形状并能够调整它们的大小。我完成了所有元素的绘制,我完成了选择这些元素并绘制截面矩形的逻辑,但我无法调整它们的大小。我尝试使用仿射变换和 scale() 方法,但是当我使用这些方法进行缩放时,它会缩放画布上的所有元素,而不仅仅是一个。知道如何让它只缩放一个元素,而不缩放其他元素吗?

【问题讨论】:

    标签: java swing java-2d affinetransform


    【解决方案1】:

    假设您在 paintComponent 方法中绘制元素...

    创建图形上下文的新副本...

    Graphics2D g2d = (Graphics2D)g.create();
    

    创建并应用仿射变换...

    AffineTransform at = anew AffineTransform();
    at.translate(...);
    at.scale(...);
    g2d.setTransform(at);
    

    绘制您的元素并处理您创建的 Graphics 上下文...

     //... Paint...
     g2d.dispose();
    

    根据需要重复。

    另一种方法可能是获取当前转换并在完成后重新应用它...

    AffineTransform currenrAT = g2d.getTransform();
    // Apply new transform and paint...
    g2d.setTransform(currentAT);
    

    【讨论】:

    • 这是一个不错的改变 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    相关资源
    最近更新 更多