|
shu さん 回答ありがとうございます。
「Timer schedul」を使わずに「SwingのTimer」で書いた時には
正常に動いています。
今回、「Timer schedul」を使かうために書き直したら、動作しません。
つまり、「Timer schedul」の書き方、書く位置が原因と考えていますが、
修正の仕方が分かりません。
宜しくお願いします。
//-----------------------------------------------------------
public class Kanran_Frame extends JFrame
{
public Kanran_Frame( )
{
Container cnt = this.getContentPane() ;
this.setSize( 800 , 600 ) ;
cnt.setBackground( Color.black ) ;
this.setLayout( null ) ;
Kanran_Panel1 k_can1 = new Kanran_Panel1() ;
k_can1.setLayout( null ) ;
k_can1.setSize( 350 , 350 ) ;
k_can1.setBackground( Color.black ) ;
cnt.add( k_can1 ) ;
new Timer( 30 , k_can1 ).start() ;
}
public static void main( String[] args )
{
Toolkit.getDefaultToolkit().setDynamicLayout( true ) ;
new Kanran_Frame() ;
( new Kanran_Frame() ).setVisible( true ) ;
}
}
//--------------------------------------------
public class Kanran_Panel1 extends JPanel implements ActionListener
{
int x , y ;
int xc = 200 ;
int yc = 200 ;
double hankei = 100.0 ;
double kakudo ;
int rr = 0 ;
Graphics2D g2 ;
public Kanran_Panel1( )
{
this.setLocation( 300 , 0 ) ;
}
public void paintComponent( Graphics g )
{
super.paintComponent( g ) ;
g2 = (Graphics2D) g ;
g2.rotate( rr * Math.PI / 180 , xc , yc ) ;
//Outer Cicle Line
g2.setColor( Color.GREEN ) ;
g2.drawOval( 100 , 100 , 200 , 200 ) ;
g2.setColor( Color.magenta ) ;
g2.drawOval( 101 , 101 , 198 , 198 ) ;
g2.setColor( Color.orange ) ;
g2.drawOval( 102 , 102 , 196 , 196 ) ;
//Scue Arm Line
//Backets
for( kakudo = 0.0 ; kakudo < 360 ; kakudo += 20.0 )
{
//Scue Arm Line
x = xc + (int)( hankei * Math.cos( Math.toRadians( kakudo ) ) ) ;
y = yc + (int)( hankei * Math.sin( Math.toRadians( kakudo ) ) ) ;
g2.drawLine( xc , yc , x , y ) ;
//Backets
g2.fillRect( x - 5 , y - 2 , 11 , 11 ) ;
}
}
// @Override
public void actionPerformed( ActionEvent e )
{
// TODO 自動生成されたメソッド・スタブ
rr = ++rr % 360 ;
repaint() ;
}
}
|