我已经开发了一个小摆动应用程序,其中我画了一个正方形。现在我想使用Thread在它的中心旋转这个正方形。我遇到的问题是如何在我的rotateSquare()中引用该正方形方法。 (实际上我需要一种方法,如果可能的话,旋转同一个方块而不是擦除整个内容窗格并在其位置绘制另一个旋转的方块)。
这是我的代码:
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Rotation extends JFrame implements Runnable{
Thread t;
Rotation()
{
super("Animation of rotation about center");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,400);
setContentPane(new Container(){
public void paint(Graphics g)
{
Graphics2D g2=(Graphics2D)g.create();
g2.setBackground(Color.WHITE);
g2.clearRect(0, 0, getWidth(), getHeight());
g2.setColor(Color.GRAY);
g2.fillRect(100, 100, 100, 100);
}
});
t=new Thread(this,"pr");
t.start();
setVisible(true);
//setOpacity(0.8f);
}
public void run()
{
try{
for(;;)
{
Thread.sleep(100);
SwingUtilities.invokeLater(new Runnable(){public void run(){
rotateSquare();
}});
}
}catch(InterruptedException e){System.out.println("Thread interrupted");}
}
public void rotateSquare();
{
}
public static void main(String args[])
{
//setDefaultLookAndFeelDecorated(true);
SwingUtilities.invokeLater(new Runnable(){public void run(){new Rotation();}});
}
}
答案 0 :(得分:3)
将旋转的对象适合父节点myAffineTransform.translate(getWidth(), getHeight())
使用Swing Timer代替Runnable#Thread
与Thread.sleep(int)
,导致Graphics2D冻结或闪烁,锁定EventDispatchThread直至无尽Thread
结束(从不以你的情况结束)
答案 1 :(得分:0)
您应该定义一个Square
类,其中包含定义方形对象的代码。这将有一个draw(Graphics g)
方法,可以知道如何绘制Square
。
在您的其他课程中,您将引用Square
对象。在paint
方法下,您可以调用square.draw(g)
。
这样,您可以在Square
draw()
方法下应用轮播。