【发布时间】:2011-07-15 10:35:54
【问题描述】:
您好,我是 java 中 affineTransform 的新手。我想用它来剪切一些我以后必须使用的 GUI。
现在我只想测试一个示例代码,但我无法解释它的输出。
这是代码
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类show中画的矩形出现在中间吧??但是它的到来向左移动了。它似乎是相对于外部框架的坐标。如果我删除 g2.setTransform(at); 就正常了。你能解释一下为什么吗??
【问题讨论】:
-
你怎么做 g2.getWidth() ??
-
为sscce+1。
标签: java swing java-2d affinetransform