java - 向 main() 添加按键监听器不起作用

标签 java swing jframe keylistener keyevent

我正在用Java制作一个游戏,其中球在没有用户控制的情况下不断向前移动,但用户可以使用向上和向下箭头键控制球的垂直运动,但是我坚持添加keylistener 类/无论它对我的 JFrame 是什么,通过我的 main 方法。基本上,我执行add(keylistener_class/method),而Java(非常正确)提示我的类或方法不是组件。那么我的问题是我应该如何将按键监听器添加到我的 Jframe 中?

干杯, 马特

代码:

    package org.ultraluminous.vertiball;

import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; public class Game extends JPanel{ static int x = 0; static int y = 0; static int ys = 0; private static void shift(){ x+=1; y+=ys; } public static void event(KeyEvent e){ if(e.getKeyCode() == KeyEvent.VK_UP){ ys = 1; } if (e.getKeyCode() == KeyEvent.VK_DOWN){ ys = -1; } } public class key{ public void Listen() { KeyListener listener = new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } }; addKeyListener(listener); setFocusable(true); } } @Override public void paint(Graphics g){ super.paint(g); Graphics2D Graph = (Graphics2D) g; Graph.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Graph.setColor(Color.BLUE); Graph.drawOval(x, y, 50, 50); Graph.fillOval(x, y, 50, 50); } public static void main (String[] args){ JFrame Win = new JFrame("Pong"); Game game = new Game(); Win.add(new Game()); //Win.add... add what? I need to add the key listener here //but seem to be unable to. Win.setResizable(false); Win.setSize(900, 600); Win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Win.setVisible(true); while (true) { shift(); Win.repaint(); try { Thread.sleep(10); } catch (InterruptedException e){ e.printStackTrace(); } } }

最佳答案

我通过将 KeyListener 添加到您的 JFrame 来让它工作。或者,您可以为 KeyListener 创建一个单独的类并以这种方式添加它(而不是使用匿名内部类)。这是我添加的内容:

public static void main (String[] args){
        JFrame Win = new JFrame("Pong");
            Game game = new Game();
            Win.add(new Game());
            Win.addKeyListener(new KeyListener() {

                @Override
                public void keyTyped(KeyEvent e) {
                }

                @Override
                public void keyPressed(KeyEvent e) {
                    if(e.getKeyCode() == KeyEvent.VK_UP){
                        ys = -1;
                    }
                    if (e.getKeyCode() == KeyEvent.VK_DOWN){
                        ys = 1;
                    }
                }

                @Override
                public void keyReleased(KeyEvent e) {
                }

            });
            Win.setResizable(false);
            Win.setSize(900, 600);
            Win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Win.setVisible(true);
            while (true) {
                shift();
                Win.repaint();
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e){
                    e.printStackTrace();
                }
            }   
      }
}

关于java - 向 main() 添加按键监听器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36235458/

相关文章:

Java:无法从静态上下文中引用

Java生日悖论算法

java - 我在读这个堆栈跟踪吗?

java - JTable 中每一列都有唯一的 JMenu

java - 鼠标单击时未绘制线条

java - 按钮未出现在框架中

java - 如何在不单击 JFrame 中任何内容的情况下使 gif 停止?

Java Swing 空白屏幕而不是显示的窗口

java - tomcat上的liferay不加载类

java - ImageIcon 不渲染动画