矢印キーを使用して、Java Swing ウィンドウ内で円を移動するプログラムを作成しようとしています。キーバインディングは正常に機能していますが、円の表示には常に問題があります。コードは次のとおりです。
public class ShapesMove extends JFrame{
public static int x = 40;
public static int y = 40;
public static void main(String[] args){
final JFrame frame = new JFrame("Movement of 2d Shapes");
frame.setSize(400,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel content = (JPanel) frame.getContentPane();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Action actionRight = new AbstractAction(){
public void actionPerformed(ActionEvent actionRightEvent){
x++;
}
};
Action actionLeft = new AbstractAction(){
public void actionPerformed(ActionEvent actionLeftEvent){
x--;
}
};
Action actionUp = new AbstractAction(){
public void actionPerformed(ActionEvent actionUpEvent){
y++;
}
};
Action actionDown = new AbstractAction(){
public void actionPerformed(ActionEvent actionDownEvent){
y--;
}
};
KeyStroke right = KeyStroke.getKeyStroke("RIGHT");
KeyStroke left = KeyStroke.getKeyStroke("LEFT");
KeyStroke up = KeyStroke.getKeyStroke("UP");
KeyStroke down = KeyStroke.getKeyStroke("DOWN");
InputMap inputMap = content.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(right, "RIGHT");
inputMap.put(left, "LEFT");
inputMap.put(up, "UP");
inputMap.put(down, "DOWN");
content.getActionMap().put("RIGHT", actionRight);
content.getActionMap().put("LEFT", actionLeft);
content.getActionMap().put("UP", actionUp);
content.getActionMap().put("DOWN", actionDown);
}
public void draw(Graphics g){
g.drawOval(x, y, 60, 60);
}
}
すべての適切なモジュールがあることがわかっているため、インポート行は含めませんでした。コンパイルは常にうまくいきますが、実行すると円が表示されません。独自の別のファイルでディスプレイに同じコードを試してみましたが、それを実行すると円が表示されたので、ここで何が間違っていますか?