diff --git a/Dogename/dogename.iml b/Dogename/dogename.iml index 59f0a82..98a35a4 100644 --- a/Dogename/dogename.iml +++ b/Dogename/dogename.iml @@ -6,6 +6,7 @@ + diff --git a/Dogename/src/main/java/me/lensferno/dogename/Main.java b/Dogename/src/main/java/me/lensferno/dogename/Main.java index 8728f89..78de196 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/Main.java +++ b/Dogename/src/main/java/me/lensferno/dogename/Main.java @@ -1,5 +1,7 @@ package me.lensferno.dogename; +import java.util.Properties; + import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; @@ -23,7 +25,6 @@ public class Main extends Application { @Override public void start(Stage primaryStage) { - try { String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0]; @@ -82,8 +83,6 @@ public class Main extends Application { } else { new Hitokoto().showHitokoto(mainInterfaceController.getRootPane(), mainInterfaceController.getTopBar(), mainInterfaceController.getMainConfig().isShowSaying()); } - - } } \ No newline at end of file diff --git a/Dogename/src/main/java/me/lensferno/dogename/controllers/GushiciPaneController.java b/Dogename/src/main/java/me/lensferno/dogename/controllers/GushiciPaneController.java index deab22b..3cdde92 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/controllers/GushiciPaneController.java +++ b/Dogename/src/main/java/me/lensferno/dogename/controllers/GushiciPaneController.java @@ -27,8 +27,8 @@ public class GushiciPaneController extends VBox { } catch (Exception e) { e.printStackTrace(); } - contentText.setText("“" + content + "”"); - contentInfo.setText("《" + title + "》" + "——" + author); + contentText.setText(String.format("“%s”", content)); + contentInfo.setText(String.format("《%s》——%s", title, author)); contentType.setText(type); } } diff --git a/Dogename/src/main/java/me/lensferno/dogename/controllers/HistoryPaneController.java b/Dogename/src/main/java/me/lensferno/dogename/controllers/HistoryPaneController.java index 63a0471..945f02f 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/controllers/HistoryPaneController.java +++ b/Dogename/src/main/java/me/lensferno/dogename/controllers/HistoryPaneController.java @@ -10,15 +10,19 @@ import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; +import javafx.scene.text.Text; import me.lensferno.dogename.data.History; import me.lensferno.dogename.utils.DialogMaker; +import java.util.ArrayList; + public class HistoryPaneController extends VBox { - public static final ObservableList shownHistoryList = FXCollections.observableArrayList(); History history; - Pane rootPane; - int pointer = 0; + + public static final ObservableList historyListCollection = FXCollections.observableArrayList(); + private final Pane rootPane; + @FXML private JFXListView historyList; @@ -31,6 +35,9 @@ public class HistoryPaneController extends VBox { @FXML private JFXButton nextBtn; + @FXML + private Text searchMessage; + public HistoryPaneController(History history, Pane rootPane) { FXMLLoader loader = new FXMLLoader(getClass().getResource("/me/lensferno/dogename/FXMLs/HistoryPane.fxml")); loader.setRoot(this); @@ -40,82 +47,89 @@ public class HistoryPaneController extends VBox { try { loader.load(); - shownHistoryList.setAll(history.getHistoryList()); - historyList.setItems(shownHistoryList); - searchBar.textProperty().addListener((observable, oldValue, newValue) -> pointer = 0); - + historyListCollection.setAll(history.getHistoryList()); + historyList.setItems(historyListCollection); + searchBar.textProperty().addListener((observable, oldValue, newValue) -> searchIndex = 0); } catch (Exception e) { e.printStackTrace(); } } private void pointOutSearchResult(int pointer) { + historyList.scrollTo(pointer); historyList.getSelectionModel().select(pointer); + historyList.getFocusModel().focus(pointer); } + private int searchIndex = 0; + @FXML void upSearch(ActionEvent event) { + searchMessage.textProperty().set(""); String searchText = searchBar.getText(); - String[] historyArrayList = history.getHistoryList().toArray(new String[0]); - - if (historyArrayList.length == 0) { + if (searchText.isEmpty()) { return; } - if (pointer > historyArrayList.length - 1 || pointer < 0) { - pointer = historyArrayList.length - 1; + ArrayList historyArrayList = history.getHistoryList(); + if (historyArrayList.isEmpty()) { + searchIndex = 0; + return; } - while (!historyArrayList[pointer].contains(searchText)) { - pointer--; - if (pointer < 0) { - pointer = historyArrayList.length - 1; - return; - } - } - pointOutSearchResult(pointer); - pointer--; - if (pointer < 0) { - pointer = historyArrayList.length - 1; + // 逐个查找,直到searchIndex == 0 + while (searchIndex > 0 && !historyArrayList.get(searchIndex).contains(searchText)) { + searchIndex--; } + pointOutSearchResult(searchIndex); + + // 上移索引,避免原地停留 + searchIndex--; + if (searchIndex < 0) { + searchIndex = historyArrayList.size() - 1; + searchMessage.textProperty().set("到达列表开头,再次点击将从列表尾部重新搜索"); + } } @FXML void downSearch(ActionEvent event) { + searchMessage.textProperty().set(""); String searchText = searchBar.getText(); - String[] historyArrayList = history.getHistoryList().toArray(new String[0]); - - if (historyArrayList.length == 0) { + if (searchText.isEmpty()) { return; } - if (pointer > historyArrayList.length - 1 || pointer < 0) { - pointer = 0; - } + ArrayList historyList = history.getHistoryList(); - while (!historyArrayList[pointer].contains(searchText)) { - pointer++; - if (pointer < historyArrayList.length - 1) { - pointer = 0; - return; - } + if (historyList.isEmpty()) { + searchIndex = 0; + return; } - pointOutSearchResult(pointer); - pointer++; - if (pointer < historyArrayList.length - 1) { - pointer = 0; + + // 逐个查找,直到最后一个元素 + while (searchIndex < historyList.size() - 1 && !historyList.get(searchIndex).contains(searchText)) { + searchIndex++; } + pointOutSearchResult(searchIndex); + + // 下移索引,避免原地停留 + searchIndex++; + if (searchIndex >= historyList.size()) { + searchIndex = 0; + searchMessage.textProperty().set("到达列表尾部,再次点击将返回列表开头重新搜索"); + } } @FXML void clearHistory() { new DialogMaker(rootPane).createDialogWithOKAndCancel("且慢!", "真的要清除全部历史记录吗?", (e) -> { this.history.clearHistory(); - pointer = 0; + historyListCollection.clear(); + searchIndex = 0; }); } diff --git a/Dogename/src/main/java/me/lensferno/dogename/controllers/HitokotoPaneController.java b/Dogename/src/main/java/me/lensferno/dogename/controllers/HitokotoPaneController.java index 74fc39d..9cd344c 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/controllers/HitokotoPaneController.java +++ b/Dogename/src/main/java/me/lensferno/dogename/controllers/HitokotoPaneController.java @@ -27,8 +27,8 @@ public class HitokotoPaneController extends VBox { } catch (Exception e) { e.printStackTrace(); } - hitokotoContent.setText("『 " + hitokoto + " 』"); - contentInfo.setText("出自:" + from + "  |  作者:" + author + "  |  上传者:" + creator); + hitokotoContent.setText(String.format("『 %s 』", hitokoto)); + contentInfo.setText(String.format("出自:%s  |  作者:%s  |  上传者:%s", from, author, creator)); contentType.setText(type); } } diff --git a/Dogename/src/main/java/me/lensferno/dogename/controllers/SettingsPaneController.java b/Dogename/src/main/java/me/lensferno/dogename/controllers/SettingsPaneController.java index c3972b1..9253fde 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/controllers/SettingsPaneController.java +++ b/Dogename/src/main/java/me/lensferno/dogename/controllers/SettingsPaneController.java @@ -131,7 +131,8 @@ public class SettingsPaneController extends VBox { void equalBtnAction(ActionEvent event) { if (!mainConfig.getPassSelectedResult()) { equalModeBtn.setSelected(false); - new DialogMaker(rootPane).createMessageDialog("且慢", "无法在“概率均分”的模式下使用,如需使用请在“人人有份”模式下启用。"); + new DialogMaker(rootPane).createMessageDialog("且慢", + "无法在“概率均分”的模式下使用,如需使用请在“人人有份”模式下启用。"); } } 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 6d91439..47b5669 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/data/Data.java +++ b/Dogename/src/main/java/me/lensferno/dogename/data/Data.java @@ -80,7 +80,6 @@ public class Data { sb.append(temp); sb.append("\n"); } - nameList = new Gson().fromJson(sb.toString(), List.class); System.out.println("Imported list from:" + path.getPath()); } catch (Exception e) { @@ -105,7 +104,6 @@ public class Data { } nameList.clear(); nameList.addAll(tempList); - } public void add(String text) { @@ -246,7 +244,7 @@ public class Data { public void readIgnoreList() { readNameIgnoreList(); readNumberIgnoreList(); - System.out.printf("There are %d names and %d numbers ignored", ignoreNameList.size(), ignoreNumberList.size()); + System.out.printf("There are %d names and %d numbers ignored\n", ignoreNameList.size(), ignoreNumberList.size()); } private void readNameIgnoreList() { diff --git a/Dogename/src/main/java/me/lensferno/dogename/data/History.java b/Dogename/src/main/java/me/lensferno/dogename/data/History.java index 017728f..ee70a2b 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/data/History.java +++ b/Dogename/src/main/java/me/lensferno/dogename/data/History.java @@ -7,7 +7,7 @@ import java.util.ArrayList; public class History { - ArrayList history; + private ArrayList history; private final String HISTORY_FILE = FilePath.toSpecificPathForm("files/history.data"); @@ -70,6 +70,7 @@ public class History { public void clearHistory() { this.history.clear(); + writeHistory(); } -} +} \ No newline at end of file diff --git a/Dogename/src/main/java/me/lensferno/dogename/sayings/Gushici.java b/Dogename/src/main/java/me/lensferno/dogename/sayings/Gushici.java index e89fd12..a8e6db2 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/sayings/Gushici.java +++ b/Dogename/src/main/java/me/lensferno/dogename/sayings/Gushici.java @@ -13,8 +13,6 @@ public class Gushici { private final String GUSHICI_API = "https://v1.jinrishici.com/all.json"; - String gushiciJSON = null; - private String getGushici() { return NetworkUtil.getHtml(GUSHICI_API); } @@ -23,18 +21,17 @@ public class Gushici { new Thread(() -> { - //gushiciJSON=getGushici(); - - String content, title, author, type; + String gushiciJSON = null; if ((gushiciJSON = getGushici()) != null) { GushiciData gushiciData = new Gson().fromJson(gushiciJSON, GushiciData.class); - content = gushiciData.getContent(); - title = gushiciData.getTitle(); - author = gushiciData.getAuthor(); - type = gushiciData.getType(); + + String content = gushiciData.getContent(), + title = gushiciData.getTitle(), + author = gushiciData.getAuthor(), + type = gushiciData.getType(); + Platform.runLater(() -> { - topBar.setText(content + " ——" + author + "《" + title + "》"); topBar.setText(String.format("%s ——%s 《%s》", content, author, title)); if (showOnDialog) { GushiciPaneController gushiciPaneController = new GushiciPaneController(content, title, author, type); @@ -42,7 +39,7 @@ public class Gushici { } }); } - }).start(); + }, "GushiciThread").start(); } diff --git a/Dogename/src/main/java/me/lensferno/dogename/sayings/Hitokoto.java b/Dogename/src/main/java/me/lensferno/dogename/sayings/Hitokoto.java index 5e6ade3..cf9f2d4 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/sayings/Hitokoto.java +++ b/Dogename/src/main/java/me/lensferno/dogename/sayings/Hitokoto.java @@ -11,11 +11,8 @@ import me.lensferno.dogename.utils.NetworkUtil; public class Hitokoto { - private final String HITOKOTO_API = "https://v1.hitokoto.cn/"; - String hitokotoJSON = null; - private String getHitokoto() { return NetworkUtil.getHtml(HITOKOTO_API); } @@ -24,18 +21,15 @@ public class Hitokoto { new Thread(() -> { - //hitokotoJSON = getHitokoto(); - - String hitokoto, from, author, creator, type; + String hitokotoJSON = null; if ((hitokotoJSON = getHitokoto()) != null) { HitokotoData hitokotoData = new Gson().fromJson(hitokotoJSON, HitokotoData.class); - - hitokoto = hitokotoData.getHitokoto(); - from = hitokotoData.getFrom(); - author = hitokotoData.getAuthor(); - creator = hitokotoData.getCreator(); - type = hitokotoData.getType(); + String hitokoto = hitokotoData.getHitokoto(), + from = hitokotoData.getFrom(), + author = hitokotoData.getAuthor(), + creator = hitokotoData.getCreator(), + type = hitokotoData.getType(); Platform.runLater(() -> { topBar.setText(String.format("《%s》:%s (%s)", from, hitokoto, author)); @@ -45,7 +39,7 @@ public class Hitokoto { } }); } - }).start(); + },"HitokotoThread").start(); } static class HitokotoData { diff --git a/Dogename/src/main/java/me/lensferno/dogename/select/core/Worker.java b/Dogename/src/main/java/me/lensferno/dogename/select/core/Worker.java index fca5e22..8eea89b 100644 --- a/Dogename/src/main/java/me/lensferno/dogename/select/core/Worker.java +++ b/Dogename/src/main/java/me/lensferno/dogename/select/core/Worker.java @@ -12,12 +12,12 @@ public final class Worker { private final Random randomNumber = new Random(); private final SimpleBooleanProperty stoppedIndicator = new SimpleBooleanProperty(true); + private final MainConfig config; - //挑选方法 - private final int selectMethod = MainConfig.METHOD_NAME; private final Data data; private final History history; private final VoicePlayer voicePlayer; + //数值范围最大最小值 private final int[] numberRange = new int[2]; private final int MIN_NUMBER = 0; @@ -25,9 +25,11 @@ public final class Worker { private final Counter counter = new Counter(); private StringProperty[] labelTexts; private int speed = 0; + //挑选次数和每一轮的挑选次数 private int maxTotalCount = MainConfig.DEFAULT_MAX_TOTAL_COUNT; private int maxCycleCount = 0; + //已经挑选了多少次 private int totalCount = 0; private int cycleCount = 0; @@ -165,7 +167,7 @@ public final class Worker { private int newResultLabelId = 0; - protected void count() { + private void count() { newResultLabelId = resultLabelId; // 每一轮的计数到达最大时并且不强制继续这轮挑选时,重置这一轮的挑选,并指派新的显示label @@ -181,7 +183,7 @@ public final class Worker { totalCount++; } - protected void resetCounter() { + private void resetCounter() { totalCount = 0; cycleCount = 0; maxCycleCount = 0; @@ -189,7 +191,7 @@ public final class Worker { continueSelecting = false; } - protected int getNewResultLabelId() { + private int getNewResultLabelId() { return newResultLabelId; } } diff --git a/Dogename/src/main/resources/me/lensferno/dogename/FXMLs/HistoryPane.fxml b/Dogename/src/main/resources/me/lensferno/dogename/FXMLs/HistoryPane.fxml index 6d8ebdf..96d6ea9 100644 --- a/Dogename/src/main/resources/me/lensferno/dogename/FXMLs/HistoryPane.fxml +++ b/Dogename/src/main/resources/me/lensferno/dogename/FXMLs/HistoryPane.fxml @@ -1,48 +1,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +