2017-03-04 40 views
-3

我是一名Java程序員,也是JavaFx的新手。我想創建一個虛擬keyborad。我可以使所有按鈕,佈局,舞臺,場景everything.I也知道使用setText()方法,它可以在同一個Java應用程序上寫文本,但問題是,我如何使理解計算機或程序(在javafx或java不在擺動中),即在按鈕單擊(即在setOnAction())上,它必須在任何'另一個'Java應用程序(例如記事本,寫字板等)上編寫一個字符。是否有我需要分別擴展或實現的任何類或接口,或者有什麼方法可以提供幫助?我已經探索了互聯網,但無法找到有用的東西。在按鈕單擊時在另一個java應用程序上編寫一個字符?

enter image description here

回答

0

如果你已經在你的控制器設置所有的按鈕,你可以這樣做:

//I supposed you named you 'button_a' your 
@FXML 
Button button_a; 
@Override 
public void initialize(URL location, ResourceBundle resources) { 
    button_a.setOnAction(event->{ 
     BufferedWriter writer = null; 
     try { 
      writer = new BufferedWriter(new FileWriter("file.txt")); //or new File("c:/users/.../.../file.txt"); 
      writer.write(button_a.getText());  //will give the letter you write on the button : the letter of the keyboard 
     } catch (IOException e) { 
      System.err.println("IOError on write"); 
      e.printStackTrace(); 
     } finally { 
      if (writer != null) { 
       try { 
        writer.close(); 
       } catch (IOException e) { 
        System.err.println("IOError on close"); 
        e.printStackTrace(); 
       } 
      } 
     } 
    }); 
} 

一個簡單的方法可能是:你一定把所有的按鈕在一個容器中,一個GridPane會很好,因爲你可以把所有的東西放到一個容器中(並且只放置按鈕,或者你需要在循環中每次檢查它是一個按鈕),然後遍歷GridPane的子節點(按鈕):

@FXML 
GridPane grid; 
@Override 
public void initialize(URL location, ResourceBundle resources) { 
    String fileName = "test.txt"; 
    for(Node button : grid.getChildren()){ 
     ((Button)button).setOnAction(event->{ 
      BufferedWriter writer = null; 
      try { 
       writer = new BufferedWriter(new FileWriter(fileName)); //or new File("c:/users/.../.../file.txt"); 
       writer.write(((Button)button).getText());  //will give the letter you write on the button : the letter of the keyboard 
      } catch (IOException e) { 
       System.err.println("IOError on write"); 
       e.printStackTrace(); 
      } finally { 
       if (writer != null) { 
        try { 
         writer.close(); 
        } catch (IOException e) { 
         System.err.println("IOError on close"); 
         e.printStackTrace(); 
        } 
       } 
      } 
     }); 
    } 
} 

希望這會有幫助

相關問題