2015-07-12 328 views
0

例如,我創建了一個標有「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);'不起作用? –

回答

0

使用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); 
    } 
} 
相關問題