如何在Java中的同一按键上分配两个动作?

时间:2019-01-17 14:05:01

标签: java javafx

我正在制作一个JavaFX应用程序,我想分配一些按键操作。 我已将分配给AnchorPane的不透明度为1.0的动作的keyCode SHIFT分配给了将相同AnchorPane的不透明度设为0.0的动作的KeyCode SLASH。

我想重构按键并在一个按键代码DEAD_TILDE上设置所有操作。

我想让键盘上的按键充当切换键。当我按DEAD_TILDE键时,如果再次按相同的DEAD_TILDE键,则应将AnchorPane的不透明度设置为1.0。

我该怎么做?

我试图创建一个布尔值并将其用于方法中。但是id不起作用,或者我只是用错误的方式完成了操作:

@FXML  private AnchorPane mainAnchor, previewCard;

private boolean opacityCard = false;

@FXML
public void initialize(URL location, ResourceBundle resources) {

  showCardPreview();
}

private void showCardPreview() {

mainAnchor.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
  if (event.getCode() == KeyCode.DEAD_TILDE || !opacityCard) {
    opacityCard = false;
    previewCard.setOpacity(1.0);

    } else if(event.getCode() == KeyCode.DEAD_TILDE || true) {
    opacityCard = true;
    previewCard.setOpacity(0.0);
     }
  });
 }

这就是我在两个操作上分配两个keyCode的方式:

 @FXML  private AnchorPane mainAnchor, previewCard;

 //key commands
  mainAnchor.setOnKeyPressed(event -> {
    switch (event.getCode()) {          

      case SHIFT:
        previewCard.setOpacity(1.0);
        break;

      case SLASH:
        previewCard.setOpacity(0.0);
        break;      
    }
  });
 }

编辑:

我尝试过使用它,但是什么也没发生:

  @FXML
  public void initialize(URL location, ResourceBundle resources) {

mainAnchor.setOnKeyPressed(event -> {
  if (event.getCode() == KeyCode.DEAD_TILDE) {
    previewCard.setOpacity(previewCard.getOpacity() == 0.0 ? 1.0 : 0.0);
    event.consume();
    }
  });

}

编辑2:

我发现我的代码中包含EventFilter,所以我刚刚像这样重构了它,这真是太麻烦了!我也将keyCode更改为DIGIT4,因为DEAD_TILDA符号不起作用

 //assign keys to some events
  mainAnchor.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
    if (event.getCode() == KeyCode.SPACE) {
      event.consume();
      flipCard();
    } else if (event.getCode() == KeyCode.DIGIT4) {
      event.consume();
      previewCard.setOpacity(previewCard.getOpacity() == 0.0 ? 1.0 : 0.0);
    }
  });

1 个答案:

答案 0 :(得分:3)

在处理程序中,根据当前状态切换状态。换句话说,如果不透明度为1.0,请将其更改为0.0,反之亦然。

mainAnchor.setOnKeyPressed(event -> {
    if (event.getCode() == KeyCode.DEAD_TILDE) {
        previewCard.setOpacity(previewCard.getOpacity() == 0.0 ? 1.0 : 0.0);
        event.consume();
    }
});

0.01.0之间切换时,您可能需要考虑使用visible属性。

mainAnchor.setOnKeyPressed(event -> {
    if (event.getCode() == KeyCode.DEAD_TILDE) {
        previewCard.setVisible(!previewCard.isVisible());
        event.consume();
    }
});