2016-12-23 45 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. 併發