keyEvent를 사용하여 왼쪽으로 원을 이동하려고합니다. 지금까지 원은 창에 그려지지만 왼쪽으로 움직이지 않습니다! 문제는 컨테이너에 Window() 생성자를 추가하는 것입니다. 콘솔에 아무런 출력이 없으므로 작동하는지 알 수 없습니다. 그래서 나는 그것이 KeyEvent 클래스에 도달했다고 생각하지 않는다. 여기 내 코드는 다음과 같습니다.Java 화살표 키를 사용하여 GUI에서 원을 이동
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import javax.swing.*;
public class Window extends JPanel {
private static Ellipse2D.Double circle;
public Window() {
super();
int width = 400;
int height = 400;
circle = new Ellipse2D.Double(0.5 * width, 0.9 * height,
0.1 * width, 0.05 * height);
addKeyListener(new MoveCircle());
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponents(g);
Graphics2D brush = (Graphics2D) g;
int width = getWidth();
int height = getHeight();
g.clearRect(0, 0, width, height);
brush.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
brush.draw(circle);
}
public class MoveCircle implements KeyListener {
@Override
public void keyPressed(KeyEvent e) {
System.out.println("Working on top!");
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
System.out.println("Working on bottom!");
circle.x++;
repaint();
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
public static void main(String[] args) {
Window window = new Window();
JFrame frame = new JFrame();
Container container = frame.getContentPane();
container.add(new Window());
frame.addKeyEvent(window.new MoveCircle());
frame.setSize(800, 700);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}
지금 올바르게 작동하도록 수정했으며 원은 이제 왼쪽과 오른쪽으로 이동합니다. 그러나 newX = circle.x + 5.0과 같은 일을하려고합니다. 이것은 아무 것도하지 않고 원을 움직이게하는 유일한 방법은 circle.x ++입니다. 나는 그것이 얼마나 천천히 움직이는 것을 좋아하지 않는다 ...? – user1198199
'newX = circle.x + 5.0; 대신'circle.x + = 5;'를 사용 해봤습니까? –
아, 감사합니다. Idon't는 그것이 새로운 임무를 받아 들일 수 없었던 이유를 알고있다. 그럼 당신은 그날을 구 했으니 이제는 게임을 계속할 것입니다. 감사합니다! – user1198199