diff --git a/Dogename/src/main/java/me/lensferno/dogename/controllers/NameManagerPaneController.java b/Dogename/src/main/java/me/lensferno/dogename/controllers/NameManagerPaneController.java index 71c228b..a430dd3 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/controllers/NameManagerPaneController.java +++ b/Dogename/src/main/java/me/lensferno/dogename/controllers/NameManagerPaneController.java @@ -10,6 +10,7 @@ import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; +import javafx.scene.control.SelectionMode; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.stage.FileChooser; @@ -54,26 +55,23 @@ public class NameManagerPaneController extends VBox { shownNameList.setAll(data.getNameList()); this.nameList.setItems(shownNameList); + this.nameList.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); this.ocrTool = ocrTool; } @FXML void deleteName(ActionEvent event) { - new DialogMaker(rootPane).createDialogWithOKAndCancel( "问一下", - "真的要这个名字吗?该操作无法撤销,除非您已经备份了名单。", + "真的要这个(些)名字吗?该操作无法撤销,除非您已经备份了名单。", e -> { - String deletedName = nameList.getSelectionModel().getSelectedItems().get(0); - - data.delete(deletedName); - shownNameList.remove(deletedName); - - data.saveToFile(); - System.gc(); + String[] deletedNames = nameList.getSelectionModel().getSelectedItems().toArray(new String[0]); + for (String deletedName : deletedNames) { + data.delete(deletedName); + shownNameList.remove(deletedName); + } }); - } @FXML @@ -82,12 +80,9 @@ public class NameManagerPaneController extends VBox { "问一下", "真的要删掉所有名字吗?该操作无法撤销,除非您已经备份了名单。", e -> { - //delete all name data.deleteAllName(); shownNameList.setAll(data.getNameList()); - data.saveToFile(); }); - } @FXML @@ -95,7 +90,6 @@ public class NameManagerPaneController extends VBox { data.makeMass(); shownNameList.clear(); shownNameList.setAll(data.getNameList()); - data.saveToFile(); } @FXML @@ -110,7 +104,6 @@ public class NameManagerPaneController extends VBox { @FXML void importNameList(ActionEvent event) { - new DialogMaker(rootPane).createDialogWithOKAndCancel( "问一下", "导入恢复名单会覆盖当前已有的名单,是否继续?", @@ -126,15 +119,12 @@ public class NameManagerPaneController extends VBox { data.clearNameIgnoreList(); data.clearNumberIgnoreList(); - data.saveToFile(); System.gc(); }); - } @FXML void addName(ActionEvent event) { - if (inputName.getText().equals("")) { new DialogMaker(rootPane).createMessageDialog("诶诶诶~", "输入框怎么是空的呢?"); return; @@ -145,7 +135,6 @@ public class NameManagerPaneController extends VBox { shownNameList.clear(); shownNameList.setAll(data.getNameList()); - data.saveToFile(); inputName.clear(); System.gc(); } @@ -173,13 +162,10 @@ public class NameManagerPaneController extends VBox { OcrPaneController ocrPaneController = fxmlLoader.getController(); ocrPaneController.setMainStage((Stage) inputName.getScene().getWindow()); stage.show(); - } @FXML - void copyTo(ActionEvent event) { + void paste(ActionEvent event) { inputName.setText(inputName.getText() + Clipboard.getClipboardString()); } - - } diff --git a/Dogename/src/main/java/me/lensferno/dogename/data/Data.java b/Dogename/src/main/java/me/lensferno/dogename/data/Data.java index 47b5669..665d46c 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/data/Data.java +++ b/Dogename/src/main/java/me/lensferno/dogename/data/Data.java @@ -18,7 +18,7 @@ public class Data { private final SecureRandom secRandom = new SecureRandom(); private final Random random = new Random(); - private List nameList; + private ArrayList nameList; private final IgnoreList ignoreList = new IgnoreList(); public Data() { @@ -30,12 +30,11 @@ public class Data { saveToFile(); return; } - ObjectInputStream ois = new ObjectInputStream(new FileInputStream(dataFile)); this.nameList = (ArrayList) ois.readObject(); + ois.close(); System.out.println(nameList.size() + " names loaded."); - } catch (EOFException EOFe) { nameList = new ArrayList<>(); System.out.println("Data file is empty."); @@ -46,6 +45,7 @@ public class Data { System.out.println("Failed to load data file."); e.printStackTrace(); } + ignoreList.readIgnoreList(); } @@ -64,28 +64,33 @@ public class Data { System.out.println("error in export namelist: " + e); e.printStackTrace(); } + + this.saveToFile(); } } public void importNameList(File path) { if (path != null) { - try { FileInputStream fis = new FileInputStream(path); - String temp; BufferedReader bis = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8)); + + String temp; StringBuilder sb = new StringBuilder(); while ((temp = bis.readLine()) != null) { sb.append(temp); sb.append("\n"); } - nameList = new Gson().fromJson(sb.toString(), List.class); + fis.close(); + nameList = new Gson().fromJson(sb.toString(), ArrayList.class); System.out.println("Imported list from:" + path.getPath()); } catch (Exception e) { System.out.println("error in import namelist:" + e); e.printStackTrace(); } + + this.saveToFile(); } } @@ -104,6 +109,8 @@ public class Data { } nameList.clear(); nameList.addAll(tempList); + + this.saveToFile(); } public void add(String text) { @@ -126,6 +133,7 @@ public class Data { } System.gc(); + this.saveToFile(); } public boolean compareNameIgnoreList() { @@ -139,6 +147,7 @@ public class Data { nameList.remove(name); ignoreList.removeName(name); + this.saveToFile(); System.gc(); } @@ -154,7 +163,6 @@ public class Data { } public void saveToFile() { - try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(dataFile)); oos.writeObject(nameList); @@ -162,12 +170,12 @@ public class Data { } catch (Exception e) { e.printStackTrace(); } - } public void deleteAllName() { nameList.clear(); ignoreList.clearNameIgnoreList(); + this.saveToFile(); } public boolean checkNameIgnored(String name) { @@ -259,7 +267,7 @@ public class Data { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(nameIgnoreFile)); this.ignoreNameList = (HashSet) ois.readObject(); - + ois.close(); } catch (EOFException e) { ignoreNameList = new HashSet<>(); writeIgnoreList(IGNORELIST_NAME_ONLY); @@ -282,6 +290,7 @@ public class Data { } ObjectInputStream ois = new ObjectInputStream(new FileInputStream(numbIgnoreFile)); this.ignoreNumberList = (HashSet) ois.readObject(); + ois.close(); } catch (EOFException e) { ignoreNumberList = new HashSet<>(); System.out.println("Ignored number list is empty.");