【问题标题】:How do I fix the KeyListener如何修复 KeyListener
【发布时间】:2014-07-07 08:40:18
【问题描述】:

为什么这不起作用 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);


        }    


        }

【问题讨论】:

  • 您没有添加监听器。顺便说一句,最好使用 KeyBindings
  • 如何添加监听器?什么是键绑定以及如何使用它们? @StanislavL
  • 詹斯的回答是对的。我打算只写这样的东西。
  • 请尽量遵循 Java 命名约定。你的类名应该像 RunPaintGUI 和 MovingSquare
  • 阅读本页右侧Related 标题下的答案。这个问题每天都会被问到,所以在发布问题之前做一些基本的搜索。更好的答案是使用Key Bindings,而不是 KeyListener。

标签: java swing actionlistener keylistener keyevent


【解决方案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】:

    首先,我不会从你的主程序中实现子类。

    我不确定你想在你的程序中做什么,但你可能只需要像这样实现一个关键监听器:

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 2012-06-08
      • 2015-11-09
      • 2023-03-15
      • 2018-12-28
      • 2021-05-19
      相关资源
      最近更新 更多