我有一个非常简单的KeyEvent:
@Override
public void start(Stage stage) throws Exception {
Group root = new Group();
Scene scene = new Scene(root);
Canvas canvas = new Canvas( 900, 700 );
scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
switch (ke.getCode()) {
case UP:
System.out.println("UP");
break;
case DOWN:
System.out.println("DOWN");
break;
case LEFT:
System.out.println("LEFT");
break;
case RIGHT:
System.out.println("RIGHT");
break;
case ENTER:
//ke.consume();
break;
default:
break;
}
}});我喜欢达到的目标:我开始运行程序,如果我按上、下、左、右,输出写回给我,向上,向下,左,右(这是正确的,没有问题)。但!如果我按回车,如果我要按上、下、左、右、输入或其他键,不要将输出写回上、下、左、右。
所以当我按下ENTER按钮时,我就会停止KeyEvent的“运行”。
发布于 2016-05-15 09:02:47
你有几个机会,这两个我先想到的。
1)将键事件的侦听器存储为类的成员,并在输入时按下取消注册.
private EventHandler<KeyEvent> keyHandler;
@Override
public void start(Stage stage) {
final Scene scene = new Scene(new Group());
stage.setTitle("Table View Sample");
stage.setWidth(450);
stage.setHeight(500);
keyHandler = new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
switch (ke.getCode()) {
case ENTER:
scene.removeEventHandler(KeyEvent.KEY_PRESSED, keyHandler);
break;
case UP:
System.out.println("UP");
break;
case DOWN:
System.out.println("DOWN");
break;
case LEFT:
System.out.println("LEFT");
break;
case RIGHT:
System.out.println("RIGHT");
break;
default:
break;
}
}};
scane.addEventHandler(KeyEvent.KEY_PRESSED, keyHandler);( 2)在按下输入键时,将布尔值存储到成员,如果设置了该成员,则使用事件.。
private Boolean enterPressed = false;
@Override
public void start(Stage stage) {
final Scene scene = new Scene(new Group());
stage.setTitle("Table View Sample");
stage.setWidth(450);
stage.setHeight(500);
scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
if(enterPressed){
ke.consume();
return;
}
switch (ke.getCode()) {
case ENTER:
enterPressed = true;
break;
case UP:
System.out.println("UP");
break;
case DOWN:
System.out.println("DOWN");
break;
case LEFT:
System.out.println("LEFT");
break;
case RIGHT:
System.out.println("RIGHT");
break;
default:
break;
}
}});两者都在工作,选择你喜欢的任何东西。
https://stackoverflow.com/questions/37235840
复制相似问题