Привет, я начинающий программист, и я создал текстовый редактор со списком просмотра.
Вы можете загрузить папку с вашими текстовыми файлами в текстовом представлении. проблема в том, что я не могу обновить список после того, как вы сохраните файл в той же папке.
Я сделал кнопку для обновления списка, но не могу заставить его работать,Я попытался удалить и снова добавить список с помощью .clear и .setAll , но он просто удаляет список. Пример того, как программа выглядит так:
Может ли кто-нибудь помочь мне получить список для обновления, когда вы нажимаете кнопку «Обновить список»?
Вот мой код:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.web.HTMLEditor;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.*;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
//Create list with files
ObservableList files = FXCollections.observableArrayList();
ListView list = new ListView(files);
Button c = new Button("Load Folder");
c.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
DirectoryChooser dc = new DirectoryChooser();
dc.setInitialDirectory(new File(System.getProperty("user.home")));
File choice = dc.showDialog(primaryStage);
if (choice == null || !choice.isDirectory()) {
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setHeaderText("Could not open directory");
alert.setContentText("The file is invalid.");
alert.showAndWait();
}
assert choice != null;
File[] selectedFiles = choice.listFiles();
files.removeAll(files);
files.addAll(selectedFiles);
list.setCellFactory(lv -> new ListCell<File>() {
@Override
protected void updateItem(File file, boolean empty) {
super.updateItem(file, empty);
setText(file == null ? null : file.getName());
}
});
}
});
// MENUS
MenuBar menuBar = new MenuBar();
Menu menuFile = new Menu("File");
Menu help = new Menu("help");
//Menu contents
// Menu FILE
MenuItem newfile = new MenuItem("New");
MenuItem open = new MenuItem("Open");
MenuItem save = new MenuItem("Save");
MenuItem export = new MenuItem("Export to txt");
MenuItem exit = new MenuItem("Exit");
newfile.setAccelerator(new KeyCodeCombination(KeyCode.N, KeyCombination.CONTROL_DOWN));
open.setAccelerator(new KeyCodeCombination(KeyCode.O, KeyCombination.CONTROL_DOWN));
save.setAccelerator(new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_DOWN));
export.setAccelerator(new KeyCodeCombination(KeyCode.E, KeyCombination.CONTROL_DOWN));
exit.setAccelerator(new KeyCodeCombination(KeyCode.W, KeyCombination.CONTROL_DOWN));
//Menu HELP
MenuItem about = new MenuItem("About J4hN0te");
//Adding Menus in the box
menuBar.getMenus().addAll(menuFile, help);
menuFile.getItems().addAll(newfile, open, save, export, exit);
help.getItems().addAll(about);
//CREATE TEXTEDITOR
final HTMLEditor htmlEditor = new HTMLEditor();
htmlEditor.setPrefHeight(500);
htmlEditor.setPrefWidth(600);
//SCROLLIST
ScrollPane scrollpane = new ScrollPane();
scrollpane.getStyleClass().add("noborder-scroll-pane");
scrollpane.setContent(htmlEditor);
scrollpane.setFitToHeight(true);
// ABOUT WINDOW
String programName = "J4hN0te";
String version = "1.0 alpha";
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Om programmet");
alert.setHeaderText(programName + " - Version " + version + "\nEtt program skapat i kursen \"Intro Javaprogrammering\"\nYrkesAkademin Sundsvall - HT2019");
alert.setContentText("Vi som gjort programmet är:\n André Pähn \n Fredrik Lax");
// CREATE NEW FILE
newfile.setOnAction(ActionEvent -> {
htmlEditor.setHtmlText("");
});
//OPEN FILE
open.setOnAction(ActionEvent -> {
ArrayList<String> lines = new ArrayList<String>();
FileChooser fc = new FileChooser();
fc.getExtensionFilters()
.addAll(
new FileChooser.ExtensionFilter(".rtf files (*.rtf)", "*.rtf"),
new FileChooser.ExtensionFilter(".html files (*.html)", "*.html"));
File selectedFile = fc.showOpenDialog(null);
try (BufferedReader reader = new BufferedReader(new FileReader(new File(String.valueOf(selectedFile))))) {
String line;
while ((line = reader.readLine()) != null)
lines.add(line);
} catch (IOException e1) {
e1.printStackTrace();
}
lines.forEach(htmlEditor::setHtmlText);
});
// EXPORT FILE TO TXT
export.setOnAction(ActionEvent -> {
FileChooser fc = new FileChooser();
fc.getExtensionFilters()
.addAll(
new FileChooser.ExtensionFilter(".txt files (*.txt)", "*.txt"));
File savefile = fc.showSaveDialog(null);
try {
String htmlString = htmlEditor.getHtmlText();
Pattern pattern = Pattern.compile("<[^>]*>");
Matcher matcher = pattern.matcher(htmlString);
final StringBuffer sb = new StringBuffer(htmlString.length());
while (matcher.find()) {
matcher.appendReplacement(sb, System.lineSeparator());
}
matcher.appendTail(sb);
String fixedHtmlString = sb.toString().trim().replaceAll("(?m)^[ \t]*\r?\n", "");
FileWriter fw = new FileWriter(savefile);
fw.write(fixedHtmlString);
fw.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
});
//Save file to RTF or HTML
save.setOnAction(ActionEvent -> {
FileChooser fc = new FileChooser();
fc.getExtensionFilters()
.addAll(
new FileChooser.ExtensionFilter(".rtf files (*.rtf)", "*.rtf"),
new FileChooser.ExtensionFilter(".html files (*.html)", "*.html"));
File savefile = fc.showSaveDialog(null);
try {
FileWriter fw = new FileWriter(savefile);
fw.write(htmlEditor.getHtmlText());
fw.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
});
// EXIT PROGRAM
exit.setOnAction(ActionEvent -> {
System.exit(1);
});
// Open About window
about.setOnAction(ActionEvent -> alert.showAndWait());
//OPEN FILE IN EDITOR WITH DOUBLE CLICK
list.setOnMouseClicked((EventHandler<MouseEvent>) mouseEvent -> {
if (mouseEvent.getClickCount() == 2) {
File item = (File) list.getSelectionModel().getSelectedItem();
ArrayList<String> lines = new ArrayList<String>();
try (BufferedReader reader = new BufferedReader(new FileReader(new File(String.valueOf(item))))) {
String line;
while ((line = reader.readLine()) != null)
lines.add(line);
} catch (IOException e1) {
e1.printStackTrace();
}
lines.forEach(htmlEditor::setHtmlText);
}
});
// BUTTON FOR UPDATING THE LIST
Button refresh = new Button("Refresh List");
refresh.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
files.clear();
files.setAll();
}
});
//GENERAL WINDOW SETTINGS
StackPane stackPane = new StackPane();
SplitPane split = new SplitPane();
split.setDividerPositions(0.3);
split.getItems().add(list);
split.getItems().add(htmlEditor);
HBox hb = new HBox();
hb.getChildren().add(c);
hb.getChildren().add(refresh);
BorderPane borderpane = new BorderPane();
borderpane.setTop(menuBar);
borderpane.setCenter(split);
borderpane.setLeft(list);
borderpane.setRight(htmlEditor);
borderpane.setBottom(hb);
stackPane.getChildren().add(borderpane);
Scene scene = new Scene(stackPane);
primaryStage.setTitle("J4hN0te");
primaryStage.setScene(scene);
primaryStage.setMinWidth(900);
primaryStage.setMinHeight(700);
primaryStage.show();
}
}