나는 자바에있는 튀는 공 신청을 창조했다. 목표는 mousePressed()
에 볼을 표시하고 프레임을 벗어나지 않고 벽에서 튀어 오르게하는 것입니다. 오직 하나의 공 하나의 스레드가 쉽게해야합니다. 내 문제는 볼을 만들기 위해 클릭 할 때마다 속도가 빨라지고 그 이유는 모르겠다는 것입니다. 누군가 제발 나를 도울 수 있어요. 추신 : 나는 스레드에 처음이다.자바 간단한 튀는 공, SingleThread, 쥐 청취자, JFrame
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyFrame extends JPanel {
public int xPos, yPos, xDir = 3, yDir = 4;
public int diameter = 50;
public MyFrame(){
final JFrame thisFrame = new JFrame();
thisFrame.add(this);
thisFrame.setTitle("Bouncing Ball");
thisFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisFrame.setLocationRelativeTo(null);
thisFrame.setSize(500, 500);
this.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {
xPos = e.getX();
yPos = e.getY();
Thread t = new Thread() {
@Override
public void run() {
while(true){
try{
Thread.sleep(10);
}catch(Exception e){};
xPos += xDir;
yPos += yDir;
if(xPos + diameter >= thisFrame.getWidth() - 25 || xPos <= 0) xDir = -xDir;
if(yPos + diameter >= thisFrame.getHeight() - diameter || yPos <= 0) yDir = -yDir;
repaint();
}
}
};
t.start();
}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseClicked(MouseEvent e) {}
});
thisFrame.setVisible(true);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillOval(xPos, yPos, diameter, diameter);
}
}
public class MyMain{
public static void main(String[] args) {
new MyFrame();
}
}
모든 마우스 이벤트 메서드를 재정의 할 필요가 없을 때 미래에'MouseAdapter'를 사용하십시오. –