2016-08-12 9 views
1

私は2つのコントローラFXMLDocumentControllerFXMLOpenedCodeControllerを持っています。私はFXMLDocumentControllerから.txtファイルの内容を読んでいるので、そのテキストをFXMLOpenedCodeControllerのテキストエリアに置いて欲しい。コードはFXMLDocumentControllerから実行中および読み込み中ですが、FXMLOpenedCodeControllerのウィンドウを開くと、.txtコンテンツの読み取り内容はテキストエリアに表示されません。私のsystem.out.printlnはString mineに内容がありますが、FXMLOpenedCodeControllerのテキストエリアには表示されていません。誰でも助けてください。ありがとうございました。別のコントローラから1つのコントローラのテキストエリアにアクセスするJavaFX

FXMLDocumentControllerコード

public class FXMLDocumentController implements Initializable { 

    @FXML 
    private MenuItem open; 

    @FXML 
    private MenuItem about; 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 

     open.setOnAction(new EventHandler<ActionEvent>(){ 
      @Override 
        public void handle (ActionEvent event){ 
       try { 
        showSingleFileChooser(); 
       } catch (IOException ex) { 
        Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex); 
       } 
        }    
     }); 
    } 
    private void showSingleFileChooser() throws IOException { 
     //Stage s = new Stage();   
     FileChooser fileChooser = new FileChooser(); 
     fileChooser.setTitle("ZEBRA file open..."); 
     FileChooser.ExtensionFilter exfil = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt"); 
     fileChooser.getExtensionFilters().add(exfil); 
     File selectedFile = fileChooser.showOpenDialog(stage); 
     if(selectedFile != null){ 
      FXMLLoader fxmlLoader = new FXMLLoader(); 
      fxmlLoader.setLocation(getClass().getResource("FXMLOpenedCode.fxml")); 
      AnchorPane frame = (AnchorPane) fxmlLoader.load(); 
      FXMLOpenedCodeController c = fxmlLoader.getController(); 
      //c.codeExecute = codeExecute; 
      c.codeExecute.appendText(readFile(selectedFile)); 
      String mine; 
      mine = readFile(selectedFile); 
      //c.codeExecute.appendText(mine); 
      System.out.println(mine); 
      Parent root = FXMLLoader.load(getClass().getResource("FXMLOpenedCode.fxml")); 
      Scene scene = new Scene(root); 
      stage4.initModality(Modality.APPLICATION_MODAL); 
      stage4.setTitle("Compile Code"); 
      stage4.setScene(scene); 
      stage4.show(); 
     } 
    } 

    private void newWindow() throws IOException{ 
     Parent root = FXMLLoader.load(getClass().getResource("FXMLNew.fxml")); 
     Scene scene = new Scene(root); 
     stage3.initModality(Modality.APPLICATION_MODAL); 
     stage3.setTitle("Enter code to run here"); 
     stage3.setScene(scene); 
     stage3.show(); 
    } 

    private String readFile(File selectedFile) throws FileNotFoundException, IOException { 
     StringBuilder content = new StringBuilder(); 
     BufferedReader buffRead = null; 
     buffRead = new BufferedReader(new FileReader(selectedFile)); 
     String text; 
     while((text = buffRead.readLine())!=null){ 
      content.append(text); 
     } 
     return content.toString(); 
    } 
} 

FXMLOpenedCodeControllerのコードが動作するように私は@FXMLprivateを除去public TextArea codeExecute;があります。

答えて

1

FXMLOpenedCode.fxmlを2回ロードしています。最初にロードするテキスト領域にテキストを配置しますが、2回目に読み込んだときのUIを表示します。つまり、間違ったテキスト領域に設定されているテキストは表示されません。

一度だけFXMLファイルをロードします。

if(selectedFile != null){ 
    FXMLLoader fxmlLoader = new FXMLLoader(); 
    fxmlLoader.setLocation(getClass().getResource("FXMLOpenedCode.fxml")); 
    AnchorPane frame = (AnchorPane) fxmlLoader.load(); 
    FXMLOpenedCodeController c = fxmlLoader.getController(); 
    //c.codeExecute = codeExecute; 
    String mine; 
    mine = readFile(selectedFile); 
    c.codeExecute.appendText(mine); 
    System.out.println(mine); 

    Scene scene = new Scene(frame); 
    stage4.initModality(Modality.APPLICATION_MODAL); 
    stage4.setTitle("Compile Code"); 
    stage4.setScene(scene); 
    stage4.show(); 
} 
+0

は、それが働いたありがとう..... – user2218840

関連する問題