当按下一个更改了值的键时,如何引发事件?

时间:2012-12-14 14:25:43

标签: java class events keylistener

好的,我是Java的新手。我的问题是:

我有一个叫做“控制”的课程。此类实现KeyListener并能够读取密钥代码。 我还有另一个叫做“显示”的课程。如果按下某个键,我可以将Control打印文本到控制台,这样就可以了。但是现在如果按下某个键,我想让Control类更改一个int X,并将此值发送给Display中的方法。显示有一个方法,应该对值做一些事情。

以下是新的代码段:

CONTROL.JAVA

public class Control实现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();
}

}

1 个答案:

答案 0 :(得分:0)

您需要在ControlDisplay对象中引用,以便您可以这样做

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);
}