JavaFX: TextViewer FileChooser and Menu Example

The TextViewer application is a simple JavaFX application that demonstrates a couple of things. First, it includes a very simple example of a Menu. Second, it shows how to create a FileChooser to select and open a file.

The following source code is pretty self explanatory.

TextViewer.java

Click to View Source

   1 package com.example.gui;
   2 
   3 import java.io.BufferedReader;
   4 import java.io.File;
   5 import java.io.FileReader;
   6 import javafx.application.Application;
   7 import javafx.event.ActionEvent;
   8 import javafx.event.EventHandler;
   9 import javafx.geometry.Insets;
  10 import javafx.scene.Scene;
  11 import javafx.scene.control.*;
  12 import javafx.scene.layout.BorderPane;
  13 import javafx.scene.layout.VBox;
  14 import javafx.stage.FileChooser;
  15 import javafx.stage.FileChooserBuilder;
  16 import javafx.stage.Stage;
  17 
  18 public class TextViewer extends Application {
  19     BorderPane root = new BorderPane();
  20     MenuBar mb = new MenuBar();
  21     VBox topVBox = new VBox();
  22     VBox centerBox = new VBox();
  23     TextArea fileTextArea = new TextArea();
  24     
  25 
  26     public static void main(String[] args) {
  27         launch(args);
  28     }
  29     
  30     public void createTop(Stage primaryStage){        
  31         // Create an HBox for the top
  32         final Stage link = primaryStage;
  33         topVBox.setSpacing(10);
  34 
  35         Menu fileMenu = new Menu("File");
  36         MenuItem openItem = new MenuItem("Open");
  37         MenuItem closeItem = new MenuItem("Close");
  38         MenuItem exitItem = new MenuItem("Exit");
  39         fileMenu.getItems().addAll(openItem, closeItem, exitItem);
  40         
  41         openItem.setOnAction(new EventHandler<ActionEvent>(){
  42             @Override
  43             public void handle(ActionEvent Event){
  44                 String currentDir = System.getProperty("user.dir") + File.separator;
  45                 StringBuilder sb = null;
  46                 
  47                 FileChooserBuilder fcb = FileChooserBuilder.create();
  48                 FileChooser fc = fcb.title("Open Dialog").initialDirectory(new File(currentDir)).build();
  49                 File selectedFile = fc.showOpenDialog(link);
  50                 sb = readFile(selectedFile);
  51                 fileTextArea.setText(sb.toString());
  52             }
  53         });
  54 
  55         closeItem.setOnAction(new EventHandler<ActionEvent>(){
  56             @Override
  57             public void handle(ActionEvent Event){
  58                 fileTextArea.setText("");
  59             }
  60         });
  61 
  62         exitItem.setOnAction(new EventHandler<ActionEvent>(){
  63             @Override
  64             public void handle(ActionEvent Event){
  65                 System.exit(0);
  66             }
  67         });
  68 
  69         mb.getMenus().addAll(fileMenu);
  70         topVBox.getChildren().add(mb);
  71         // End topBox
  72     }
  73     
  74     public void createCenter(){
  75         // Create an VBox for the center
  76         centerBox.setPadding(new Insets(10, 10, 10, 10));
  77         
  78         Label centerLbl = new Label("File Contents");
  79         centerLbl.setStyle("-fx-font-size:14pt; -fx-font-weight:bold;");
  80         
  81         fileTextArea.setWrapText(true);
  82         fileTextArea.setPrefSize(200, 400);
  83         fileTextArea.setStyle("-fx-font-size:14pt; -fx-font-weight:bold; -fx-font-family:Monaco, 'Courier New', MONOSPACE");
  84 
  85         
  86         centerBox.getChildren().add(centerLbl);
  87         centerBox.getChildren().add(fileTextArea);
  88     }
  89     
  90     public StringBuilder readFile(File selectedFile){
  91         StringBuilder sb = new StringBuilder(1024);
  92         String curLine = "";
  93         try{
  94             FileReader fr = new FileReader(selectedFile);
  95             BufferedReader br = new BufferedReader(fr);
  96             
  97             while(curLine != null){
  98                 curLine = br.readLine();
  99                 sb.append(curLine).append("\n");
 100             }
 101         } catch (Exception e){
 102             e.getMessage();
 103         }
 104         return sb;
 105     }
 106     
 107     @Override
 108     public void start(Stage primaryStage) {
 109         
 110         // Initialize Regions
 111         createTop(primaryStage);
 112         createCenter();
 113 
 114         // Combine components into final UI
 115         root.setTop(topVBox);
 116         root.setCenter(centerBox);
 117         primaryStage.setScene(new Scene(root, 800, 600));
 118         primaryStage.show();
 119     }
 120 }
 121