JavaFXの質問です。一度プログラムを作成して上手く実行できました。
で、レイアウトに不満が出てきてscreenBuilderで一から作り直したのですが
例外、javafx.fxml.LoadException:Root hasn't been set.Use method setRoot() before load.
というのが出ます。どこかでsetRootメソッドを使えばいいのでしょうか?
java(SampleController.java)
1 2import java.io.BufferedReader; 3import java.io.BufferedWriter; 4import java.io.File; 5import java.io.FileReader; 6import java.io.FileWriter; 7import java.io.PrintWriter; 8import java.io.StringWriter; 9import java.net.URL; 10import java.util.ResourceBundle; 11 12import javafx.event.EventHandler; 13import javafx.fxml.FXML; 14import javafx.fxml.Initializable; 15import javafx.scene.control.Alert; 16import javafx.scene.control.Alert.AlertType; 17import javafx.scene.control.TextArea; 18import javafx.scene.input.KeyCode; 19import javafx.scene.input.KeyEvent; 20 21public class SampleController implements Initializable{ 22 @FXML 23 private TextArea txtArea; 24 25 26 @Override 27 public void initialize(URL location, ResourceBundle resources) { 28 try { 29 File file = new File("C:\\Users\\mscat\\tmpData.dat"); 30 if (!file.exists()) {//ファイルがなかった場合 31 file.createNewFile(); 32 Alert alert = new Alert(AlertType.INFORMATION); 33 alert.setTitle("Information Dialog"); 34 alert.setHeaderText("ファイルが無かったので作りました"); 35 alert.setContentText(null); 36 alert.show(); 37 } else {//ファイルがあった場合 38 FileReader filereader = new FileReader(file); 39 BufferedReader br = new BufferedReader(filereader); 40 String str = br.readLine(); 41 42 while(str != null){//ファイルを末尾まで読む 43 txtArea.appendText(str); 44 str = br.readLine(); 45 txtArea.appendText("\n"); 46 } 47 48 br.close(); 49 50 51 } 52 53 } catch (Exception e) { 54 // エラーのスタックトレースを表示 55 StringWriter sw = new StringWriter(); 56 PrintWriter pw = new PrintWriter(sw); 57 e.printStackTrace(pw); 58 pw.flush(); 59 String str = sw.toString(); 60 //例外メッセージボックスを表示 61 Alert alert = new Alert(AlertType.INFORMATION); 62 alert.setTitle("Information Dialog"); 63 alert.setHeaderText("例外発生!"+ str); 64 alert.setContentText(null); 65 alert.show(); 66 67 } 68 69 } 70 @FXML 71 void KeyPressed(){// 押下処理を追加する 72 txtArea.setOnKeyPressed(new EventHandler<KeyEvent>() { 73 74 @Override 75 public void handle(KeyEvent event) { 76 if (event.getCode() == KeyCode.ENTER) { 77 File file = new File("C:\\Users\\mscat\\tmpData.dat"); 78 FileWriter filewriter; 79 try {//Enterキーを押されたらファイルに書き込む 80 filewriter = new FileWriter(file); 81 BufferedWriter br = new BufferedWriter(filewriter); 82 83 br.write(txtArea.getText()); 84 85 br.close(); 86 87 } catch (Exception e) { 88 // エラーのスタックトレースを表示 89 StringWriter sw = new StringWriter(); 90 PrintWriter pw = new PrintWriter(sw); 91 e.printStackTrace(pw); 92 pw.flush(); 93 String str = sw.toString(); 94 //例外メッセージボックスを表示 95 Alert alert = new Alert(AlertType.INFORMATION); 96 alert.setTitle("Information Dialog"); 97 alert.setHeaderText("例外発生!"+ str); 98 alert.setContentText(null); 99 alert.show(); 100 101 } 102 103 } 104 105 } 106 }); 107 } 108 109} 110
Fxml(Sample.fxml)
1<?xml version="1.0" encoding="UTF-8"?> 2 3<?import javafx.scene.control.*?> 4<?import java.lang.*?> 5<?import javafx.scene.layout.*?> 6 7<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.SampleController"> 8 <top> 9 <MenuBar BorderPane.alignment="CENTER"> 10 <menus> 11 <Menu mnemonicParsing="false" text="File"> 12 <items> 13 <MenuItem mnemonicParsing="false" text="Close" /> 14 </items> 15 </Menu> 16 <Menu mnemonicParsing="false" text="Edit"> 17 <items> 18 <MenuItem mnemonicParsing="false" text="Delete" /> 19 </items> 20 </Menu> 21 <Menu mnemonicParsing="false" text="Help"> 22 <items> 23 <MenuItem mnemonicParsing="false" text="About" /> 24 </items> 25 </Menu> 26 </menus> 27 </MenuBar> 28 </top> 29 <center> 30 <TextArea fx:id="txtArea" onKeyPressed="#KeyPressed" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" /> 31 </center> 32</BorderPane> 33
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/18 04:14