按下键盘上相应键时如何按下按钮? JavaFX

问题描述:

例如,我创建了一个标有“1”的按钮。无论何时按下此按钮,1都会附加到textField。不过,只需在我的键盘上输入1,我就可以将1添加到textField。当这样做时,我想通过按钮来获取视图,就好像它被按下而不是如果一个键。 我一直在想吴丹可能是它有可能以这种方式来管理这个问题:按下键盘上相应键时如何按下按钮? JavaFX

rootNode.setOnKeyTyped(new EventHandler<KeyEvent>() { 
     @Override 
     public void handle(KeyEvent event) { 
      textField.appendText(event.getCharacter()); 
      if(event.getCharacter().equals("1")){ 
       // here button should be pressed 
      } 
     } 
    }); 

有一些方法,可以改变按钮的外观? 感谢提前。

@James_D,你的程序工作正常,但我connt将你的解决方案应用到我的程序。也许是因为我定制了我的按钮。看看我的代码的一部分:

HashMap<String, Button> buttons = new HashMap<>(); 
    int btnVal = 1; 
    for(int j = 5 ; j >= 3; j --){ 
    for(int i = 1; i <= 3; i ++){ 
     Button btn = createNumberButton(Integer.toString(btnVal++), inputField, i, j); 
     rootNode.getChildren().add(btn); 
     buttons.put(Integer.toString(btnVal), btn); 
     } 
    } 
    rootNode.setOnKeyPressed(event -> { 
     Button btn = buttons.get(event.getText()); 
     if (btn != null) { 
      System.out.println(event.getText()); 
      btn.arm(); 
      inputField.appendText(event.getText()); 
     } 
    }); 

    rootNode.setOnKeyReleased(event -> { 
     Button btn = buttons.get(event.getText()); 
     if (btn != null) { 
      btn.disarm(); 
     } 
    }); 
+0

可能重复:http://stackoverflow.com/questions/4753004/how-do-i-programatically-send-actionevent-to-jbutton –

+1

@BhavikPatel这是JavaFX和不摆动。 – NwDev

+0

调用'button.setPressed(true);'不起作用? –

使用button.arm()(和button.disarm()以“释放”的话)。

SSCCE:

import java.util.HashMap; 
import java.util.Map; 

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.GridPane; 
import javafx.stage.Stage; 

public class PressButtonOnTyping extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     GridPane root = new GridPane(); 
     TextField textField = new TextField(); 
     textField.setDisable(true); 

     root.add(textField, 0, 0, 3, 1); 

     Map<String, Button> buttons = new HashMap<>(); 

     for (int i = 1 ; i <= 9; i++) { 
      Button button = createButton(i, textField); 
      buttons.put(Integer.toString(i), button); 
      root.add(button, (i-1)%3, 1+ (i-1)/3); 
     } 
     Button zeroButton = createButton(0, textField); 
     root.add(zeroButton, 1, 4); 
     buttons.put("0", zeroButton); 

     root.setOnKeyPressed(e -> { 
      Button button = buttons.get(e.getText()); 
      if (button!=null) { 
       button.arm(); 
       textField.appendText(e.getText()); 
      } 
     }); 

     root.setOnKeyReleased(e -> { 
      Button button = buttons.get(e.getText()); 
      if (button!=null) { 
       button.disarm(); 
      }   
     }); 

     primaryStage.setScene(new Scene(root, 400, 400)); 
     primaryStage.show(); 
    } 

    private Button createButton(int value, TextField target) { 
     String s = Integer.toString(value); 
     Button button = new Button(s); 
     button.setOnAction(e -> target.appendText(s)); 
     return button ; 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
}