2016-12-23 62 views
-1

我在编程Java时是全新的。我无法让我的keyEvent s无法工作。我需要这个我做的一个小游戏。这里是我的代码:如何让keyEvent在Java中工作?

package markusrytter.pingpong; 

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 main extends JPanel implements KeyListener { 

    static int ballX; 
    static int ballY; 
    static int ballR = 15; 

    @Override 
    public void paint(Graphics g) { 
     super.paint(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2d.fillOval(ballX - ballR, ballY - ballR, ballR * 2, ballR * 2); 
    } 
    public static void main(String[] args) throws InterruptedException { 
     JFrame frame = new JFrame("Sample Frame"); 
     main game = new main(); 
     frame.add(game); 
     frame.setSize(1400, 800); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 

     ballX = frame.getContentPane().getSize().width/2; 
     ballY = frame.getContentPane().getSize().height/2; 

     while (true) { 
      game.repaint(); 
      Thread.sleep(10); 
     } 
    } 

    public void keyPressed(KeyEvent e) { 
     System.out.println("A key is Pressed: " + e.getKeyCode()); 
     if(e.getKeyCode() == KeyEvent.VK_SPACE){ 
      System.out.println("Spacebutton pressed"); 
     } 
    } 
} 

我确实希望有人可以帮忙,我试图观看视频,但又一次,我是新来的java。

+1

(1-)不知道为什么这得到这么多的票。 OP表示他们阅读文章并直接复制代码。如果直接复制代码,你不觉得代码应该工作吗? – camickr

回答

0

最重要的是:改变你班级的名字。它被称为main,这是一个坏主意。此外,更好的做法是覆盖paintComponent()而不是paint

您没有将关键字添加到JFrame。你应该在你的主创建game之后调用此:

frame.addKeyListener(game); 

您还需要添加剩余KeyListener方法。

而且应该这样做。

+0

然后它说:不能在静态参考中使用这个 –

+0

@markusrytter注意我的编辑。 (把''这个'换成'游戏') – ItamarG3

+0

非常感谢,现在可以运行 –

4
  1. 您的代码将无法编译,因为你没有实现KeyListener的(完全)

  2. 你没有的键侦听器添加到它的构造面板。

  3. KeyEvents仅被分派给有焦点的组件。你的面板不可聚焦,所以它永远不会收到事件。您使用方法setFocusable(true)

  4. 请勿重写paint()。相反,你应该重写paintComponent(...)

  5. 你甚至不应该使用KeyListener。相反,当使用Swing时,你应该使用Key Bindings

  6. 请勿为您的类的属性使用静态变量。

  7. 您的GUI不是在Event Dispatch Thread (EDT)上创建的。

我读的文章,我看过录像,并做了一切完全像他们,

显然不是,或者它会工作。

对于正确的教程开始Swing Tutorial。上有几个部分:

  1. 如何写的KeyListener
  2. 风俗画
  3. 键绑定。
  4. 并发