Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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 classes

Explanation / 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();

}

}