2016-04-03 84 views
1

该程序假设将程序中的值存储到按下写入按钮时。然后当按下读取时,它将读取并显示值。结果应该显示在文本区域中。但是,运行该程序时,按钮不显示。当我运行它时,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

这只是正常的我。我复制并粘贴代码并运行它,按钮和文本显示并按预期工作。 –

+0

这些按钮没有显示给我。只显示标题的灰色框。 – goblin

+0

可能你没有保存或重新编译你的最新版本:代码中没有任何错误。清理并重建项目(或者IDE中的任何等价物)。 –

回答

3

在你的代码的末尾添加的这两行代码,让你的GUI中可见

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

@goblin你创建了一个'TextField'和两个'Button',但是你没有把它们放在任何地方。 –

+0

@Denis Kokorin自JavaFX 8以来,可以将节点传递给HBox和VBox作为构造器参数。这是哥布林在这里做的。 guleryuz答案因此已经完成 –

+0

这些按钮似乎没有出现在vProgram框中。我已经添加了新的代码 – goblin