有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何修复KeyListener

为什么这不起作用 JFrame已经制作好,油漆也在使用,但我无法让keylistener正常工作。我试图在keylistener中打印一些内容,但当按下左箭头时,它没有显示出来

import java.awt.event.KeyEvent;


public class movingsquare extends runpaintgui{
    public void key(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_LEFT){

            x = x - 5;
            repaint(); 
            System.out.println( x);
        }

    }
}

其他类

import java.awt.Graphics;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;

public class runpaintgui extends JFrame{    
int x = 30;
    public static void main(String[] args){
        runpaintgui frame = new runpaintgui();
        frame.setSize(1275, 775);
        frame.setResizable(false);
        frame.setTitle("game");
        frame.setVisible(true);    

    }
     public void paint(Graphics g){
            super.paint(g);

            g.fill3DRect(x, 30, 60, 60, true);


        }    


        }

共 (2) 个答案

  1. # 1 楼答案

    通过以下方式更改代码:

    package de.swisslife.muellerj.test;
    
    import java.awt.Graphics;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    
    import javax.swing.JFrame;
    
        public class runpaintgui  extends JFrame implements KeyListener{
    
          public runpaintgui(){
    
            this.setSize(1275, 775);
            this.setResizable(false);
            this.setTitle("game");
            this.setVisible(true);    
            this.addKeyListener(this);
            this.setVisible(true);;
          }
            int x = 30;
            public static void main(String[] args){
              runpaintgui runpaintgui = new runpaintgui();
    
            }
             public void paint(Graphics g){
                    super.paint(g);
    
                    g.fill3DRect(x, 30, 60, 60, true);
    
    
                }    
    
            public void keyTyped(KeyEvent e) {
              // TODO Auto-generated method stub
    
            }
            public void keyPressed(KeyEvent e) {
              if (e.getKeyCode() == KeyEvent.VK_LEFT){
    
                x = x - 5;
                repaint(); 
                System.out.println( x);
            }
    
            }
            public void keyReleased(KeyEvent e) {
              // TODO Auto-generated method stub
    
            }
        }
    
  2. # 2 楼答案

    首先,我不会从你的主程序中得到一个子类实现

    我不确定你想在程序中做什么,但你可能只需要实现一个键侦听器,如下所示:

    public class Test extends JFrame {
    
        static int x = 30;
    
        public static void main(String[] args) {
    
    
            final Test frame = new Test();
            frame.setSize(1275, 775);
            frame.setResizable(false);
            frame.setTitle("game");
            frame.setVisible(true);
            frame.addKeyListener(new KeyListener() {
    
                @Override
                public void keyTyped(KeyEvent arg0) {
                    if (arg0.getKeyCode() == KeyEvent.VK_LEFT){
                        x = x - 5;
                        frame.repaint(); 
                        System.out.println( x);
                    }
    
                }
    
                @Override
                public void keyReleased(KeyEvent arg0) {}
    
                @Override
                public void keyPressed(KeyEvent arg0) {}
            });
        }
    
        public void paint(Graphics g) {
            super.paint(g);
    
            g.fill3DRect(x, 30, 60, 60, true);
        }
    }