Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何在同一按键上分配两个动作?_Java_Javafx - Fatal编程技术网

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

在Java中,如何在同一按键上分配两个动作?,java,javafx,Java,Javafx,我正在制作一个JavaFX应用程序,我想在按键时指定一些操作。 我将键码移位指定给使AnchorPane不透明度为1.0的操作,并将键码斜杠指定给将同一AnchorPane不透明度设置为0.0的操作 我想重构按键并将所有操作设置为一个键代码死区 我想让键盘上的按键作为切换按键。当我按下死角键时,如果我再次按下相同的死角键,Ancorpane的不透明度应设置为1.0。Ancorpane的不透明度应设置为0.0 我该怎么做? 我尝试创建一个布尔值并在方法中使用它。但id不起作用,或者我只是用了一种错

我正在制作一个JavaFX应用程序,我想在按键时指定一些操作。 我将键码移位指定给使AnchorPane不透明度为1.0的操作,并将键码斜杠指定给将同一AnchorPane不透明度设置为0.0的操作

我想重构按键并将所有操作设置为一个键代码死区

我想让键盘上的按键作为切换按键。当我按下死角键时,如果我再次按下相同的死角键,Ancorpane的不透明度应设置为1.0。Ancorpane的不透明度应设置为0.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);
     }
  });
 }
这就是我在两个动作上分配两个键码的方式:

 @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
,则将其更改为
0.0
,反之亦然

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

当你在<代码> 0 和<代码> 1 < /代码>之间切换时,你可能想考虑使用<代码>可见属性。

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

我试着把你的一个代码放在Initialize方法中,但是没有一个不起作用。如果这个方法不起作用,那么问题很可能出现在你代码的其他地方。请编辑您的问题以提供答案。你确定你甚至会收到按下死角按钮的事件吗?当我试着用你的代码对一个锚烷进行不透明处理时,我也有一个开关操作符(见主题中的一个代码),这个按下SHIFT和斜杠的开关操作符代码工作得非常好,但当我此时按下死角按钮时,你的代码没有反应。我还试着使用另一个键码,比如DIGIT4,同样的情况。我不明白我做错了什么。我是否应该将您的代码放在某个方法中,并在Initialize方法中使用它?确保
mainAnchor
或子代具有焦点;否则,将不会向其发送关键事件。您可以尝试调用
mainAnchor.requestFocus()
。请注意,这需要它是
场景的一部分才能工作。我已经找到了解决方案,请检查我的编辑!但是我的TILDA符号不起作用,我用了另一个键码,比如数字4,你有什么想法为什么TILDA符号不起作用吗?若我打开记事本的平铺符号,那个么我的键盘就能正常工作