【发布时间】:2015-09-11 00:08:55
【问题描述】:
我正在尝试编写一个程序,该程序将绘制几个围绕中心点旋转的形状。结果应该类似于螺旋仪。我正在尝试使用矩形对其进行测试,但我只能让其中两个出现在窗口中。其中一个是它应该在的位置,但是在第一次旋转之后,它会在窗口的左上角向上抛出另一个正方形。它应该围绕中心点旋转和绘制。这是我的代码的一部分。
import java.awt.*;
import java.awt.geom.Ellipse2D;
import javax.swing.JPanel;
public class Shapes extends JPanel
{
private double angle;
private int type;
private int radius;
private int repeats;
public Shapes(int t, int r, int z)
{
type = t;
radius = r;
repeats = z;
angle = 360 / repeats;
}
public void paintComponent( Graphics g )
{
super.paintComponent( g );
Graphics2D g2d = (Graphics2D)g;
g.setColor(Color.red);
int centerX = getWidth()/2;
int centerY = getHeight()/2;
double curAngle = 0;
for(int i=0; i<=repeats; i+=1)
{
g.setColor(Color.blue);
Rectangle tangle = new Rectangle(0, 0, radius, radius);
g2d.rotate(Math.toRadians(curAngle));
g2d.translate(centerX, centerY);
g2d.draw(tangle);
curAngle += angle;
}
}
【问题讨论】:
-
类似this?
-
请注意
rotate和translate正在复合 -
如果我只有 Rectangle(centerX, centerY, radius, radius);并省略翻译,奇怪的事情也会发生。
-
您可能需要在应用下一个转换之前重置转换,基本上,每次调用 translate 时,
Graphics上下文都会再次移动该数量,因此它会逐渐移动。旋转也是如此,每次调用旋转时,都会添加到Graphics上下文的当前旋转
标签: java graphics paintcomponent