2017-03-04 24 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(); 
        } 
       } 
      } 
     }); 
    } 
} 

希望这会有帮助

相关问题