Java中的切换键

Java中的切换键,java,key,toggle,Java,Key,Toggle,基本上,每次按下F1键时,我都会尝试切换布尔值。 在我的主类中,我有一个每秒调用60次的update方法,我编写了如下代码: Main.class: private Keyboard key = new Keyboard; // keyboard object boolean debug; // boolean to control visibility of debug screen private boolean toggle; // used to toggle boolean priv

基本上,每次按下F1键时,我都会尝试切换布尔值。 在我的主类中,我有一个每秒调用60次的update方法,我编写了如下代码:

Main.class:

private Keyboard key = new Keyboard; // keyboard object
boolean debug; // boolean to control visibility of debug screen
private boolean toggle; // used to toggle boolean

private void update() { // update is called 60/s
    if (key.isKeyPressed(Keyboard.f1) && !toggle) {
        debug = !debug;
        toggle = true;
    } else if (!key.isKeyPressed(Keyboard.f1)) toggle = false;
}
private void update() {
    debug = key.toggle(Keyboard.f1, debug); 
}
键盘类:

public class Keyboard implements KeyListener {

private boolean[] keys = new boolean[65536];

public static final int f1 = KeyEvent.VK_F1; // key code of f1 key

public void keyPressed(KeyEvent e) {
    keys[e.getKeyCode()] = true;
}

public void keyReleased(KeyEvent e) {
    keys[e.getKeyCode()] = false;
}

public void keyTyped(KeyEvent e) {
}

public boolean isKeyPressed(int key) {
    return keys[key];
}
private boolean toggle;

public void toggle(int key, boolean b) {
    if (isKeyPressed(key) && !toggle) {
        b = !b;
        toggle = true;
    } else if (!isKeyPressed(key)) toggle = false;
}
private boolean toggle;

public boolean toggle(int key, boolean b) {
    if (isKeyPressed(key) && !toggle) {
        b = !b;
        toggle = true;
    } else if (!isKeyPressed(key) && toggle) {
        toggle = false;
    }
    return b;
}
这样它工作得很完美,但如果我在Keyboard.class中创建类似的方法,它就不起作用了:

主类中的更新方法:

private void update() {
    key.toggle(Keyboard.f1, debug); // toggle boolean debug if f1 key pressed, but.. NOT WORKING!! WHYYY!!?
}
键盘类:

public class Keyboard implements KeyListener {

private boolean[] keys = new boolean[65536];

public static final int f1 = KeyEvent.VK_F1; // key code of f1 key

public void keyPressed(KeyEvent e) {
    keys[e.getKeyCode()] = true;
}

public void keyReleased(KeyEvent e) {
    keys[e.getKeyCode()] = false;
}

public void keyTyped(KeyEvent e) {
}

public boolean isKeyPressed(int key) {
    return keys[key];
}
private boolean toggle;

public void toggle(int key, boolean b) {
    if (isKeyPressed(key) && !toggle) {
        b = !b;
        toggle = true;
    } else if (!isKeyPressed(key)) toggle = false;
}
private boolean toggle;

public boolean toggle(int key, boolean b) {
    if (isKeyPressed(key) && !toggle) {
        b = !b;
        toggle = true;
    } else if (!isKeyPressed(key) && toggle) {
        toggle = false;
    }
    return b;
}
我的问题是: 为什么第二种方法不起作用,我怎样才能使它起作用?
谢谢大家!

谢谢你,程序员,你说得对;D

Main.class:

private Keyboard key = new Keyboard; // keyboard object
boolean debug; // boolean to control visibility of debug screen
private boolean toggle; // used to toggle boolean

private void update() { // update is called 60/s
    if (key.isKeyPressed(Keyboard.f1) && !toggle) {
        debug = !debug;
        toggle = true;
    } else if (!key.isKeyPressed(Keyboard.f1)) toggle = false;
}
private void update() {
    debug = key.toggle(Keyboard.f1, debug); 
}
键盘类:

public class Keyboard implements KeyListener {

private boolean[] keys = new boolean[65536];

public static final int f1 = KeyEvent.VK_F1; // key code of f1 key

public void keyPressed(KeyEvent e) {
    keys[e.getKeyCode()] = true;
}

public void keyReleased(KeyEvent e) {
    keys[e.getKeyCode()] = false;
}

public void keyTyped(KeyEvent e) {
}

public boolean isKeyPressed(int key) {
    return keys[key];
}
private boolean toggle;

public void toggle(int key, boolean b) {
    if (isKeyPressed(key) && !toggle) {
        b = !b;
        toggle = true;
    } else if (!isKeyPressed(key)) toggle = false;
}
private boolean toggle;

public boolean toggle(int key, boolean b) {
    if (isKeyPressed(key) && !toggle) {
        b = !b;
        toggle = true;
    } else if (!isKeyPressed(key) && toggle) {
        toggle = false;
    }
    return b;
}
现在它返回我想要的值,谢谢,伙计,我完全忘记了。
有更好/更简单的方法吗?

您没有更新
数组,因此理论上,总是按下
F1
键。使用
b=!b
是无用的,因为参数只会在方法的上下文中更改,更改不会反映给调用方