2014-11-08 54 views
0

我想讓這個矩形移動,當我按下「w」鍵。我想知道爲什麼日食給我一個錯誤,說變量「你好」沒有找到,只要我清楚地將它標記爲上面聲明的矩形,並且它在「公共空白」類中。當我按下「w」時,它什麼都不做。將keylistener添加到java中。實施keylistener類限制?

import java.awt.Graphics; 
import java.awt.Graphics2D;  
import javax.swing.JComponent; 

import java.awt.*; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.awt.geom.Ellipse2D; 
import java.awt.geom.Line2D; 
import java.awt.geom.Point2D; 
import java.util.*; 

public class drawingComponent extends JComponent implements KeyListener { 

    public void paintComponent(Graphics g){ 
     Graphics2D g2 = (Graphics2D) g; 
     g2.setColor(new Color(255,25,0)); 
     g2.setFont(new Font("monospace", Font.BOLD+Font.ITALIC, 30)); 
     g2.drawString("nothing yet",300,320); 
     Rectangle hello = new Rectangle(300, 100, 50, 50);   
     g2.fill(hello); 
    }  

    @Override 
    public void keyPressed(KeyEvent e) {    
     if(e.getKeyCode() == KeyEvent.VK_W){     
      hello.setLocation(hello.x-50, hello.y);     
     } 
    } 

    @Override 
    public void keyReleased(KeyEvent e) {   

    } 

    @Override 
    public void keyTyped(KeyEvent e) { 
     // TODO Auto-generated method stub   
    }  
} 

回答

0

變量hello在方法paintComponent()中聲明。簡而言之,您需要使其成爲班級的成員,以使其可用於其他方法。

+0

另外,什麼是所有的空行?這使得很難閱讀你的代碼。 – mattias 2014-11-08 23:33:57

+0

太好了,謝謝,回答了我的問題。想知道爲什麼當我按「w」時似乎還沒有發生任何事情? – wilkers 2014-11-08 23:34:28

+0

@wilkers:它是你想調用的'keyTyped()'方法嗎?那個沒有包含任何東西,所以什麼都不會發生請參閱[Java教程](https://docs.oracle.com/javase/tutorial/2d/basic2d/)和[Javadocs](https://docs.oracle.com/javase/7/docs/api/java/ awt/Graphics2D.html)以獲得更多關於如何使用Graphics2D的信息。如果它回答了您最初的問題,請不要忘記接受答案。 – mattias 2014-11-08 23:37:45