現在我正在研究樹莓派,並且我在java,javafx platforms中編寫了一些程序。我只是想告訴你,我只是javafx的初學者。如何在Javafx中自動觸發輸入鍵
根據我只想在更改我的textfield後觸發ENTER鍵。我的程序的工作原理是這樣的;
1)我已經創建了一個masterform fxml,它將所有其他頁面定向到一個文本框。
2)我創建的主要方法,讓我用鍵盤輸入一些特定的字符串值,將它們分配給文本字段進行頁面變更。我有一個橋接Java頁面,它包含全局變量,以便在項目中隨處使用。因此,首先我將鍵值設置爲這些全局變量。這些全局變量創建爲stringproperty,用於爲任何更改添加actionlistener。
4)然後我將這些全局變量設置爲文本字段。
5)Textfield指示來自鍵盤的相關值。但不幸的是我不能轉發頁面而沒有按下輸入鍵。在這種情況下我想觸發這個textfield。但不幸的是我不知道如何觸發texfield而不按下輸入密鑰。因此,我決定讓自動觸發器爲該文本字段輸入密鑰。
我只是用機器人方法;
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
但它並沒有經過工作。因爲我設置的全局變量文本框的第一time.It沒有定義文本字段的值是按回車鍵後changed.It決定。
因此,如何在獲取全局變量的值後觸發此文本字段。我想通過如何設置頁面,我會告訴你我的程序是如何工作的。
我的代碼的例子是;
主要方法
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
for (String strBarcode = scanner.nextLine(); !strBarcode.isEmpty();
strBarcode = scanner.nextLine()) {
if (strBarcode.equals("distribution")){
Global.G_MOD.set("distribution");
System.out.println(Global.G_MOD.get());
}
}}
GlobalVariables.java(橋頁)
public class Global{
public static StringProperty G_MOD = new SimpleStringProperty("");
}
我MasterController頁爲JavaFX
public class masterformController implements Initializable {
@FXML
public TextField tbxBarcode;
@FXML
void onchangetbxBarcode(ActionEvent event) {
if(Global.G_MOD.get().equals("distribution")){
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/puttolightfx/fxml/page1.fxml"));
Parent rootpage1 = (Parent)loader.load();
pnPages.getChildren().clear();
pnPages.getChildren().add(rootpage1);
} catch (IOException ex) {
Logger.getLogger(masterformController.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void initialize(URL url, ResourceBundle rb) {
Global.G_MOD.addListener(new ChangeListener(){
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
String Newvalue = (String)newValue;
tbxBarcode.setText(Global.G_MOD.get());}
});
}
}
所以一切工作,只是我有觸發文本框當全局值:Global.G_MOD將顯示在texfield上。然後它會根據全局值Global.G_MOD傳遞到另一個頁面:「distribution」。
SOLUTION(解決):
我解決了使用上的textfield.I的監聽線程我的問題放棄了觸發自動進入關鍵,側重於文本框的變化。
我只是決定使用線程來更改文本字段監聽器中的.fxml頁面。
Platform.runLater(new Runnable() {
@Override
public void run() {
//if you change the UI, do it here !
}
});
編輯的代碼:
tbxBarcode.textProperty().addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> {
String Newvalue=(String)newValue;
System.out.println(tbxBarcode.getText());
Platform.runLater(new Runnable() {
@Override
public void run() {
if(Global.G_MOD.get().equals("distribution")){
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/puttolightfx/fxml/page1.fxml"));
Parent rootpage1 = (Parent)loader.load();
pnPages.getChildren().clear();
pnPages.getChildren().add(rootpage1);
} catch (IOException ex) {
Logger.getLogger(masterformController.class.getName()).log(Level.SEVERE, null, ex);
}
}
// }
}
});
});
你是什麼意思與「robot.fireEvent」。我應該定義而不是這個?沒有名爲「fireEvent」的方法應該使用什麼來代替這個。 – Xspacex
'fireEvent()'是所有javafx控件的內置方法。對不起提及機器人。我編輯了我的答案。將此方法應用於您的'TextField'或您想要自動觸發事件的任何其他控件。 –
我認爲它會很好的工作。我只是嘗試過,但在這一行發生了另一個錯誤:** tbxBarcode.fireEvent(new KeyEtbxBarcodevent(KeyEvent.KEY_PRESSED,「」,「」,KeyCode.ENTER,true,true,true, true)); **和錯誤:**不兼容的類型; int不能轉換爲組件**但我不知道哪個值是「int」 – Xspacex