Mercurial > hg > y16 > e165759 > os > 7.5
changeset 0:80482e7dd872 default tip
Initial commit
author | Hiroyuki Tamae <e165759@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Feb 2018 16:46:55 +0900 |
parents | |
children | |
files | .idea/vcs.xml OS_7.5_KeyRec.iml src/jp/ac/uryukyu/ie/e165759/Controller.java src/jp/ac/uryukyu/ie/e165759/Main.java src/jp/ac/uryukyu/ie/e165759/view.fxml |
diffstat | 5 files changed, 168 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.idea/vcs.xml Tue Feb 13 16:46:55 2018 +0900 @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="hg4idea" /> + </component> +</project> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OS_7.5_KeyRec.iml Tue Feb 13 16:46:55 2018 +0900 @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" inherit-compiler-output="true"> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jp/ac/uryukyu/ie/e165759/Controller.java Tue Feb 13 16:46:55 2018 +0900 @@ -0,0 +1,116 @@ +package jp.ac.uryukyu.ie.e165759; +import javafx.application.Platform; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.*; +import javafx.scene.control.Button; +import javafx.scene.control.TextField; +import javafx.scene.input.KeyEvent; +import java.awt.AWTException; +import java.util.ArrayList; + +public class Controller { + + @FXML private CheckBox Thread1CB; // Thread1の利用状況 + @FXML private Button Button_Start; + @FXML private TextField type; + @FXML private TextField Retype; + + private ArrayList<String> posX = new ArrayList<>(); // タイピングの記録用 + + /* + Thread1 + */ + private Rec Thread1; + + @FXML + void ClickButtonStart(ActionEvent e){ + if(this.Button_Start.getText().equals("Start")){ + this.Button_Start.setText("Stop"); + type.setText(""); + Retype.setText(""); + // タイピングデータのクリア + posX.clear(); + + // スレッドで処理開始 + Thread1 = new Rec(); + Thread1CB.setSelected(true); + Thread1CB.setDisable(true); + Thread1.start(); + + }else if(this.Button_Start.getText().equals("Stop")) { + this.Button_Start.setText("Start"); + + // 現在動いているスレッドに割り込みして中止 + Thread1.interrupt(); + } + } + + @FXML + public void handleKey(KeyEvent event) { + try { + posX.add(event.getText()); + } catch (NumberFormatException | NullPointerException ex) { } + } + + /* + Draw 記録したカーソルの軌跡を再現する + 引数 : sleep_ (記録した間隔と同期する) + */ + private void Draw(int sleep_) throws AWTException { + String text; + + for (String aPosX : posX) { + try { + Thread.sleep(sleep_); // 取得間隔分おやすみ + } catch (InterruptedException s) { + System.out.println("Interrupted!"); + } + if (!aPosX.equals("~")) { // 文字が打たれていない時間を除いて + text = Retype.getText() + aPosX; + Retype.setText(text); + } + } + } + + /* + Rec タイピングの記録 + */ + public class Rec extends Thread { + private boolean isActive = true; // スレッドがアクティブか + private void stopThread(){ this.isActive = false; } + private void startThread(){ this.isActive = true; } + + public void run() { + int sleep; // タイピングを取得する間隔 + // 精度 : 1ms + sleep = 1; + + while (this.isActive) { + try { + posX.add("~"); // 何も打たれていない時の補完 + Thread.sleep(sleep); // sleep分待機 + + // 割り込み処理(Stopボタンが押された時) + } catch (InterruptedException e) { + try { + Thread1.stopThread(); // Thread1を非アクティブ化 + Draw(sleep); // タイピングを再現 + } catch (AWTException e1) { + e1.printStackTrace(); + } + } + } + } + } + + @FXML + private Button Button_Quit; + + @FXML + protected void ClickButtonQuit(ActionEvent i){ + if(this.Button_Quit.getText().equals("Quit")){ + Platform.exit(); // プログラム終了 + } + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jp/ac/uryukyu/ie/e165759/Main.java Tue Feb 13 16:46:55 2018 +0900 @@ -0,0 +1,23 @@ +package jp.ac.uryukyu.ie.e165759; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +public class Main extends Application { + + @Override + public void start(Stage primaryStage) throws Exception{ + Parent root = FXMLLoader.load(getClass().getResource("view.fxml")); + primaryStage.setTitle("OS7.5 KeyRec"); + primaryStage.setScene(new Scene(root, 520, 250)); + primaryStage.show(); + } + + public static void main(String[] args) { + launch(args); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jp/ac/uryukyu/ie/e165759/view.fxml Tue Feb 13 16:46:55 2018 +0900 @@ -0,0 +1,11 @@ +<?import javafx.scene.control.Button?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.control.CheckBox?> +<?import javafx.scene.control.TextField?> +<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="1000.0" xmlns:fx="http://javafx.com/fxml" fx:controller="jp.ac.uryukyu.ie.e165759.Controller"> + <Button fx:id="Button_Start" layoutX="40.0" layoutY="10.0" mnemonicParsing="false" onAction="#ClickButtonStart" text="Start" /> + <Button fx:id="Button_Quit" layoutX="100.0" layoutY="10.0" mnemonicParsing="false" onAction="#ClickButtonQuit" text="Quit" /> + <CheckBox fx:id="Thread1CB" layoutX="300.0" layoutY="14.0" mnemonicParsing="false" text="Thread1" disable="true"/> + <TextField fx:id="type" onKeyPressed="#handleKey" layoutX="40.0" layoutY="60.0" prefWidth="430.0" prefHeight="50" /> + <TextField fx:id="Retype" editable="false" layoutX="40.0" layoutY="130.0" prefWidth="430.0" prefHeight="50" /> +</AnchorPane> \ No newline at end of file