2016-04-03 9 views
1

このプログラムは、書き込みを押したときにプログラムの値をaに保存することを想定しています。次に、読み取りが押されると、値を読み取り、表示します。結果はテキスト領域に表示されるはずです。ただし、プログラムを実行すると、ボタンが表示されません。私はそれを実行すると、私のコンピュータ上でJavaが起動しますが、何も起きません。Java FXのテキストボックスが機能しない

package program; 

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.util.Arrays; 
import java.util.Date; 

import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextArea; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 


public class program extends Application { 

    public static void main(String[] args) { 
      launch(args); 
     } 

     @Override 
     public void start(Stage primaryStage) throws ClassNotFoundException, IOException { 

      // Text area 
      TextArea textArea = new TextArea(); 
      textArea.setStyle("-fx-background-color: lightgrey; -fx-text-fill: blue; -fx-control-inner-background: grey"); 
      textArea.setPadding(new Insets(15, 15, 15, 15)); 


      Button write = new Button("Write"); 
      write.setOnAction(e -> { 
       // Create an output stream for file 
       try(ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("Exercise17_05.dat", true))) { 
        int[] numbers = {1, 2, 3, 4, 5}; 
        // Write to file 
        // 1. Write double 
        output.writeDouble(5.5); 
        // 2. Write int array object 
        output.writeObject(numbers); 
        // 3. Write date object 
        output.writeObject(new java.util.Date()); 
        // 4. Write utf string 
        output.writeUTF("Exercise17_05.dat"); 

       } catch(IOException exception) { 
        System.exit(0); 
       } 
      }); 



      Button read = new Button("Read"); 
      read.setOnAction(e -> { 

       //Create an input stream for file 
       try(ObjectInputStream input = new ObjectInputStream(new FileInputStream("Exercise17_05.dat"));){ 
       // Read from file 
        // 1. Read double 
       double doubleValue = input.readDouble(); 
       textArea.appendText("Double value: " + doubleValue); 
       // 2. Read int array object 
       int[] newNumbers = (int[]) (input.readObject()); 
       textArea.appendText("Integers: " + Arrays.toString(newNumbers)); 
       // 3. Read date object 
       Date date = (java.util.Date) (input.readObject()); 
       textArea.appendText("DateTime: " + date); 
       // 4. Read utf string 
       String fileName = input.readUTF();  
       textArea.appendText("File name: " + fileName); 

        } catch(IOException | ClassNotFoundException exception) { 
         System.exit(0); 
        }}); 


      HBox hButtons = new HBox(read, write); 
      VBox vProgram = new VBox(8); 
      vProgram.getChildren().addAll(hButtons, textArea); 

      primaryStage.setScene(new Scene(vProgram)); 
      primaryStage.setTitle("Write and Read"); 
      primaryStage.show(); 


     } 
} 
+0

これは私のためだけで正常に動作し、あなたのGUIが表示されるように、あなたのコードの末尾に次の2行のコードを追加します。コードをコピーして貼り付けて実行したところ、ボタンとテキストが表示され、期待どおりに機能しました。 –

+0

ボタンが私のために表示されていません。タイトルが表示された灰色のボックスだけです。 – goblin

+0

おそらくあなたはあなたが持っている最新のバージョンを保存したり再コンパイルしていないでしょう。コードに何も間違いはありません。プロジェクトを清掃して再構築してください(IDE内の同等のもの)。 –

答えて

3

 primaryStage.setScene(new Scene(vProgram, 300, 250)); 
     primaryStage.show(); 
+0

@goblinあなたは1つの 'TextField'と2つの' Button'を作成しましたが、あなたはどこにでも配置していません。 –

+0

@Denis Kokorin JavaFX 8以降、HBoxとVBoxにノードをコンストラクタparamsとして渡すことができます。これはゴブリンがここでやっていることです。したがって、guleryuzの回答はすでに完了しています –

+0

ボタンはvProgramボックスに表示されていないようです。私は新しいコードを追加しました – goblin

関連する問題