

キーボードの矢印を押したときに、表示したフレームがその方向に１０移動するプログラムを作成しています。キーボードの入力は検知しているのですが、フレームが動きません。どうやったら動きますでしょうか。以下作成したプログラム。

[code]

    //インポート・ファイル
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.JFrame;
    
    //メイン・クラス
    
    public class framemoving
    {
    
        int x = 100;
        int y = 100;
    
     //メイン・メソッド
     public static void main(String[] args)
     {
      framemoving test = new framemoving();
     }
     //コンストラクタ
     public framemoving()
     {
    
     //基礎フレームの設定。
     JFrame frame = new JFrame();
     frame.setSize(250,250);
     frame.setLocation(x, y);
     frame.setTitle("Key_test");
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setVisible(true);
    
     //キーボード・リスナーの設定
    //フレームにキーボード入力の受信を登録
      frame.addKeyListener(new Keyboard_input());
    
     }
    
    //キーボードのためのクラス
    
    class Keyboard_input implements KeyListener
    {
        public void keyPressed(KeyEvent e)
        {
            System.out.println("keyPressed.");
    
            switch(e.getKeyCode()){
            case KeyEvent.VK_UP : y = y - 10; break;
            case KeyEvent.VK_RIGHT : x=x+10; break;
            case KeyEvent.VK_DOWN : y=y+10; break;
            case KeyEvent.VK_LEFT : x=x-10;  break;
        }
    }
      public void keyReleased(KeyEvent e)
     {
      //keyReleasedに対するメッセージを表示
      System.out.println("keyReleased.");
    }
     public void keyTyped(KeyEvent e)
     {
      //keyTypedに対するメッセージを表示
      System.out.println("keyTyped.");
     }
    }}
    
[/code]


CC BY-SA 4.0
2020-04-18T04:57:51.183
65731
2022-12-14T04:04:35.500
2020-04-18T09:56:12.650
2808
34781
question
java swing
キーボード入力でフレームを移動させる


フレーム(`JFrame`オブジェクト)の
[`setLocation`](https://docs.oracle.com/javase/jp/11/docs/api/java.desktop/java/awt/Window.html#setLocation\(int,int\))メソッドを再度呼んで位置を更新してあげれば良いと思います。

[code]

    public void keyPressed(KeyEvent e)
    {
        System.out.println("keyPressed.");
    
        // 現在の位置
        Point point = frame.getLocation();
        int x = point.x;
        int y = point.y;
        switch(e.getKeyCode()){
        case KeyEvent.VK_UP : y = y - 10; break;
        case KeyEvent.VK_RIGHT : x=x+10; break;
        case KeyEvent.VK_DOWN : y=y+10; break;
        case KeyEvent.VK_LEFT : x=x-10;  break;
        }
        frame.setLocation(x, y);
    }
    
[/code]

[コード差分](https://github.com/yukihane/stackoverflow-
qa/commit/8dbec7d38ad3eaed63a8e4d6680e3790e1273455)


CC BY-SA 4.0
2020-04-18T09:19:36.387
65740
2020-04-18T09:19:36.387
2808
65731
answer