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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+