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
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