2012-12-14 50 views
-1

好吧,我對Java有點新鮮。我的問題是這樣的:如何在一個鍵被按下而改變了一個值的時候發出一個事件?

我有一個叫做「Control」的類。該類實現KeyListener並能夠讀取鍵碼。 我也有另一個叫「顯示」的類。如果按下一個鍵,我可以使控制打印文本到控制檯,這樣就可以工作。但是現在,如果按下某個鍵,我想讓Control類更改一個int X,並將此值發送到Display中的方法。顯示有一個方法,應該做一些值。

這裏是新的代碼片段:

CONTROL.JAVA

公共類控件實現KeyListener的{

private Display display; 
private int x = 0; 

public Control(){ 

} 

public void keyPressed(KeyEvent e) { 

    if (e.getKeyCode() == KeyEvent.VK_D){ 

     x++; 
     System.out.println("D"); 
    } 
    else if (e.getKeyCode() == KeyEvent.VK_A){ 

     x--; 
     System.out.println("A"); 
    } 

    display.DoSomethingWithX(x); 
    } 

    public void keyReleased(KeyEvent e) {} 
    public void keyTyped(KeyEvent e) {} 
} 

DISPLAY.JAVA

公共類顯示擴展JPanel {

public Display(){ 

    JFrame main = new JFrame("Unnamed"); 
    main.add(this); 

    main.setSize(xWidth, yHeight); 
    main.setVisible(true); 
    main.setDefaultCloseOperation(main.EXIT_ON_CLOSE); 

    main.addKeyListener(new Control()); 
    main.setFocusable(true); 
} 

public void DoSomethingWithX(int x){ 

    Graphics g; 
    g.setColor(c); //Let's assume c is already defined somewhere. 
    g.drawLine(x, 25, x, 25); //Don't mind the y value. It is least important. 
} 

public static void main(String[] args){ 
    Display display = new Display(); 
} 

}

+2

1)爲了更好地幫助越早,張貼[SSCCE](http://sscce.org/ )。 2)請學習常見的[Java命名約定](http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307)(具體用於名稱的情況) ,方法和屬性名稱並一致使用。 –

回答

0

您必須Control參考Display對象,所以你可以像這樣

public void keyPressed(KeyEvent e) { 

    if (e.getKeyCode() == KeyEvent.VK_D){ 
     x++; 
    } 
    else if (e.getKeyCode() == KeyEvent.VK_A) { 
     x--; 
    } 

    //display is instance of Display class 
    display.doSomthingWithXValue(x); 
} 
+0

好吧,這部分工作,我的程序不會馬上崩潰,但它現在崩潰,只要我按下一個鍵。 – user1904252

+0

崩潰系統給你哪個錯誤信息? – Kaadzia

+0

@ user1904252,錯誤是什麼?在你的問題中顯示更新和更多的代碼。 –

相關問題