의 인스턴스 인 panel
인 JPanel
이라는 위젯에서 녹색 원이 번쩍이는 패턴으로 대각선으로 이동하는 간단한 애니메이션을 만들려고합니다. 녹색 원이 번지게하는 방법은 무엇입니까?
JFrame
repaint
메소드를 호출하는 애니메이션 메소드를 호출합니다 (
actionPerformed
메소드를 호출하여 애니메이션을 시작하도록되어 누르는 시작 버튼을 가지고) 자체가 청취자 인 메인 클래스에있다.
대신 버튼을 누르면 원이 초기 좌표에 나타나고 지연 후 다른 원이 최종 좌표에 나타납니다. 누가 내가 잘못 가고 있는지 알아내는 데 도움을 줄 수 있습니까? 나는 자바에서 초보자 다. 몇 년 전에 C에서 몇 가지 기본적인 프로그래밍을 해왔다.
미리 감사드립니다. 여기 내 코드입니다 :
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Smear implements ActionListener{
JFrame frame;
MyPanel panel;
JButton button;
Smear animgui1;
int x=70;
int y=70;
public static void main(String[] args) {
Smear animgui=new Smear();
animgui.project();
animgui.set(animgui);
}
public void set(Smear anim) {
animgui1=anim;
}
public void project() {
frame=new JFrame();
panel=new MyPanel();
button=new JButton("Start");
button.addActionListener(this);
frame.getContentPane().add(BorderLayout.NORTH, button);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.setSize(300,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void animate() {
while(x!=200) {
panel.repaint();
x++;
y++;
System.out.println("++++");
try {
Thread.sleep(50);
}
catch(Exception ex) {};
}
}
public void actionPerformed(ActionEvent event) {
animgui1.animate();
}
class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.green);
g.fillOval(x,y,40,40);
}
}
}
그러나 동시에, 나는 그 버튼 (I 버튼과 청취자에 관한 코드를 제거), 그리고 그것의에 의도 한 방식으로 작동하지 않고 다른 프로그램 SmearGui을 만들었습니다
; 원은 천천히 번짐 패턴으로 움직입니다. 그에 대한 코드는 다음과 같습니다 는import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SmearGui{
JFrame frame;
MyPanel panel;
//JButton button;
SmearGui animgui1;
int x=70;
int y=70;
public static void main(String[] args){
SmearGui animgui=new SmearGui();
animgui.project();
animgui.set(animgui);
animgui.animate();
}
public void set(SmearGui anim){
animgui1=anim;
}
public void project(){
frame=new JFrame();
panel=new MyPanel();
//button=new JButton("Start");
//button.addActionListener(this);
//frame.getContentPane().add(BorderLayout.NORTH, button);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.setSize(300,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void animate(){
while(x!=200){
panel.repaint();
x++;
y++;
try{
Thread.sleep(50);
}
catch(Exception ex){};
}
}
/*public void actionPerformed(ActionEvent event){
animgui1.animate();
}*/
class MyPanel extends JPanel{
public void paintComponent(Graphics g){
g.setColor(Color.green);
g.fillOval(x,y,40,40);
}
}
}
위의 코드는 메인 자체에 애니메이션 방법을 배치합니다.
코드 들여 쓰기는 사람들이 코드를 읽을 때 코드를 이해하도록 돕기위한 것입니다. 우리는 * 우리가 그것을 읽고 싶어합니까? –
'Thread.sleep (50);'그러지 마. Swing ['Timer'] (http://download.oracle.com/javase/7/docs/api/javax/swing/Timer.html)을 사용하십시오. –
오 .. 정말 미안해 !! 지금부터는 그것을 돌볼 것입니다 ... 그리고 감사합니다 !!! 저는 방금 Java를 배우기 시작했습니다. 20-30 일 정도 지났습니다. 그리고 저는 그 모든 것을 ~ Swing Timer로 보지 못했습니다. – stonecoldjha