首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AffineTransform的问题

AffineTransform的问题
EN

Stack Overflow用户
提问于 2011-07-15 18:35:55
回答 3查看 3.7K关注 0票数 3

你好,我是affineTransform在爪哇的新手。我想用它来裁剪一些我以后要用到的GUI。现在,我只想测试一个示例代码,但是我无法解释它的输出。以下是代码

代码语言:javascript
复制
    package main;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.geom.AffineTransform;

    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class MainClass{
    public static void main(String[] args) {
    JFrame jf = new JFrame("Demo");

    jf.getContentPane().add(new MyCanvas());

    jf.setSize(600, 600);
    jf.setVisible(true);
  }
}

    class Left extends JPanel {

    Left(){
        setPreferredSize(new Dimension(450,450));
        setBorder(BorderFactory.createLineBorder(Color.green));
        setBackground(Color.gray);

    }


      public void paintComponent(Graphics g) {

            super.paintComponent(g);

            Graphics2D g2 = (Graphics2D) g;

            AffineTransform at = new AffineTransform();

            g2.setTransform(at);

            g2.drawRect(getWidth()/2 - 10, getHeight()/2 - 10, 20, 20);

          }
}

    class MyCanvas extends JPanel {

    MyCanvas()
    {
        setBorder(BorderFactory.createLineBorder(Color.red));
        setLayout(new FlowLayout(FlowLayout.CENTER));
        add(new Left());
    }


}

我想要在Left类中绘制的矩形显示在中间,对吧??但是它向左移动了..看起来它的坐标是相对于外部框架的。如果我移除g2.setTransform(at);,它就会恢复正常。你能解释一下为什么吗??

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-15 19:45:51

我知道你的问题在哪里,你和家长画的是一样的图形。"super.paintComponent(g);“

你应该尝试像super.repaint()这样的东西;

票数 -3
EN

Stack Overflow用户

发布于 2011-07-15 20:40:30

setTransform方法仅用于在呈现后还原原始Graphics2D变换。也就是说,您永远不应该在现有转换之上应用新的坐标转换,因为Graphics2D可能已经具有其他用途所需的转换,例如呈现Swing组件。您的代码举例说明了这一点。若要添加坐标变换,请使用transformrotatescaleshear方法。

票数 7
EN

Stack Overflow用户

发布于 2011-07-15 19:23:51

您可能正在绘制某个轻量级组件。这意味着它没有自己的坐标系。因此,它使用最接近的重量级parrent的coord。系统。

因此,您应该将您想要与原始转换进行的转换组合在一起(通过将它们相乘。

在你画完画之后,你(也许)应该恢复原来的变换。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6705743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档