Please use with JavaFx only, thank you so much. Overvievw This assignment create
ID: 3744396 • Letter: P
Question
Please use with JavaFx only, thank you so much.
Overvievw This assignment creates a GUI application that allows a user to choose a file, load it, modify it, and save it to the original file or a new file. Write code to display the following Editor interface. It is just a VBox with a MenuBar and a TextArea. Editor File Tools Help Four score and seven years ago,our fathers brought forth on this continent The File menu has menu items for New, Open, Save, Save As, and Exit. The Tools & Help menus have just one menu choice each-Word Count&About Editor respectively Overall Design Use two class files to create this application: 1. "FileListener" is an external class that contains an actionPerformed method that handles all the File menu choices 2. "Editor" contains the GUI constructor definition and a main that instantiates thee class. The event listeners for the Tools and Help menu are in the Editor class as anonymous inner classesExplanation / Answer
1) Editor.java
import java.io.File;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Editor extends Application{
private Stage initialStage;
VBox root;
MenuBar menuBar;
TextArea textArea;
File selectedFile;
FileListener fileListener;
@Override
public void start(Stage initialStage) throws Exception {
this.initialStage = initialStage;
root = new VBox();
textArea = new TextArea();
fileListener = new FileListener(this.initialStage, selectedFile, textArea);
menuBar = new MenuBar();
createMenus();
root.getChildren().add(textArea);
Scene scene = new Scene(root);
this.initialStage.setScene(scene);
this.initialStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
private void createMenus() {
// --- Menu File
Menu menuFile = new Menu("File");
MenuItem m1 = new MenuItem("New");
MenuItem m2 = new MenuItem("Open");
MenuItem m3 = new MenuItem("Save");
MenuItem m4 = new MenuItem("Save as");
MenuItem m5 = new MenuItem("Exit");
menuFile.getItems().addAll(m1,m2,m3,m4,m5);
//New Menu
m1.setOnAction(e -> {
fileListener.handleNewMenuAction();
});
//Open Menu
m2.setOnAction(e -> {
fileListener.handleOpenMenuAction();
});
//Save Menu
m3.setOnAction(e -> {
fileListener.handleSaveMenuAction();
});
//Save As Menu
m4.setOnAction(e -> {
fileListener.handleSaveAsMenuAction();
});
//Exit Menu
m5.setOnAction(e -> {
fileListener.handleExitMenuAction();
});
// --- Menu Tools
Menu menuTools = new Menu("Tools");
MenuItem m6 = new MenuItem("Word Count");
m6.setOnAction(e -> {
String[] words = textArea.getText().split(" | | ");
Alert alert = new Alert(AlertType.INFORMATION);
alert.setContentText("Total Words : " + words.length);
alert.showAndWait();
});
menuTools.getItems().addAll(m6);
// --- Menu Help
Menu menuHelp = new Menu("Help");
MenuItem m7 = new MenuItem("About Editor");
m7.setOnAction(e -> {
String details = "Author : {Your Name} Date Created: 2018-09-09";
Alert alert = new Alert(AlertType.INFORMATION);
alert.setContentText(details);
alert.showAndWait();
});
menuHelp.getItems().addAll(m7);
menuBar.getMenus().addAll(menuFile, menuTools, menuHelp);
root.getChildren().add(menuBar);
}
}
2) FileListener.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javafx.application.Platform;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.TextArea;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class FileListener {
Stage initialStage;
File selectedFile;
TextArea textArea;
public FileListener(Stage initialStage, File selectedFile, TextArea textArea) {
this.initialStage = initialStage;
this.selectedFile = selectedFile;
this.textArea = textArea;
this.changeTitle("Editor");
}
//Handlers
//New Menu
public void handleNewMenuAction() {
textArea.clear();
changeTitle("Editor");
}
//Open Menu
public void handleOpenMenuAction() {
FileChooser fileChooser = new FileChooser();
fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Text Files", "*.txt"));
selectedFile = fileChooser.showOpenDialog(initialStage);
textArea.appendText(readSelectedFile());
changeTitle(selectedFile.getName());
}
//Save Menu
public void handleSaveMenuAction() {
if(selectedFile == null) {
Alert alert = new Alert(AlertType.INFORMATION);
alert.setContentText("This is new file, click "Save as" to save the file.");
alert.showAndWait();
}else {
saveContetnToFile();
}
}
//Save as Menu
public void handleSaveAsMenuAction() {
FileChooser fileChooser = new FileChooser();
fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Text Files", "*.txt"));
if(selectedFile != null) {
fileChooser.setInitialDirectory(selectedFile.getParentFile());
}
selectedFile = fileChooser.showSaveDialog(initialStage);
saveContetnToFile();
changeTitle(selectedFile.getName());
}
//New Menu
public void handleExitMenuAction() {
Platform.exit();
}
public void changeTitle(String title){
initialStage.setTitle(title);
}
private void saveContetnToFile() {
try {
if(selectedFile != null && !selectedFile.exists()) {
selectedFile.createNewFile();
}
BufferedWriter bw = new BufferedWriter(new FileWriter(selectedFile,false));
String[] lines = textArea.getText().split(" ");
for(String line : lines) {
bw.write(line);
bw.newLine();
}
bw.close();
} catch (IOException e) {
//Ignore
}
}
private String readSelectedFile() {
StringBuffer content = new StringBuffer();
String line = null;
try {
BufferedReader br = new BufferedReader(new FileReader(selectedFile));
while((line = br.readLine()) != null) {
content.append(line+" ");
}
br.close();
} catch (IOException e) {
//Ignore
}
return content.toString();
}
}