From d46d2588890b3a008782010a0103c58502e6d262 Mon Sep 17 00:00:00 2001 From: Daniel <59575049+lumijiez@users.noreply.github.com> Date: Mon, 14 Oct 2024 20:10:57 +0300 Subject: [PATCH] fixed styling --- pom.xml | 136 +++++++------- src/main/java/module-info.java | 4 +- .../lumijiez/monoalpha/MainController.java | 115 +++++++++++- .../org/lumijiez/monoalpha/MonoAlpha.java | 14 +- .../monoalpha/util/CharacterSwitcher.java | 7 +- .../monoalpha/util/InputAnalyzer.java | 4 +- .../org/lumijiez/monoalpha/monoalpha.fxml | 172 ++++++++++++++++-- 7 files changed, 355 insertions(+), 97 deletions(-) diff --git a/pom.xml b/pom.xml index 2116bcf..b5af8ca 100644 --- a/pom.xml +++ b/pom.xml @@ -2,73 +2,79 @@ - 4.0.0 + 4.0.0 - org.lumijiez - Monoalpha - 1.0-SNAPSHOT - Monoalpha + org.lumijiez + Monoalpha + 1.0-SNAPSHOT + Monoalpha - - UTF-8 -5.10.2 + + UTF-8 + 5.10.2 + - - - org.openjfx - javafx-controls - 17.0.6 - - - org.openjfx - javafx-fxml - 17.0.6 - + + + org.openjfx + javafx-controls + 17.0.6 + + + org.openjfx + javafx-fxml + 17.0.6 + + + io.github.mkpaz + atlantafx-base + 2.0.1 + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + - - org.junit.jupiter - junit-jupiter-api - ${junit.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - test - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.13.0 - - 17 - 17 - - - - org.openjfx - javafx-maven-plugin - 0.0.8 - - - - default-cli - - org.lumijiez.monoalpha/org.lumijiez.monoalpha.HelloApplication - app - app - app - true - true - true - - - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + 17 + 17 + + + + org.openjfx + javafx-maven-plugin + 0.0.8 + + + + default-cli + + org.lumijiez.monoalpha/org.lumijiez.monoalpha.MonoAlpha + app + app + app + true + true + true + + + + + + \ No newline at end of file diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 9e7d241..1bd5c13 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -1,8 +1,10 @@ module org.lumijiez.monoalpha { - requires javafx.controls; requires javafx.fxml; + requires atlantafx.base; opens org.lumijiez.monoalpha to javafx.fxml; exports org.lumijiez.monoalpha; + exports org.lumijiez.monoalpha.util; + opens org.lumijiez.monoalpha.util to javafx.fxml; } \ No newline at end of file diff --git a/src/main/java/org/lumijiez/monoalpha/MainController.java b/src/main/java/org/lumijiez/monoalpha/MainController.java index b0ab077..745a938 100644 --- a/src/main/java/org/lumijiez/monoalpha/MainController.java +++ b/src/main/java/org/lumijiez/monoalpha/MainController.java @@ -3,12 +3,22 @@ package org.lumijiez.monoalpha; import javafx.fxml.FXML; import javafx.scene.chart.BarChart; import javafx.scene.chart.XYChart; +import javafx.scene.control.Button; import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import org.lumijiez.monoalpha.util.CharacterSwitcher; +import org.lumijiez.monoalpha.util.InputAnalyzer; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; -public class HelloController { +public class MainController { @FXML private BarChart barChart; @@ -16,9 +26,34 @@ public class HelloController { @FXML private TextArea inputArea; + @FXML + private TextArea ruleArea; + + @FXML + private TextArea outputArea; + + @FXML + private TextField patternInput; + + @FXML + private Button patternButton; + + @FXML + private TextArea patternOutput; + + private Map> dictionaryMap; + @FXML private void initialize() { - analyzeText(); + analyzeText(); + loadDictionary(); + barChart.setStyle("-fx-font-size: 18px;"); + inputArea.textProperty().addListener((observable, oldValue, newValue) -> { + analyzeText(); + applyChanges(); + }); + ruleArea.textProperty().addListener((observable, oldValue, newValue) -> applyChanges()); + patternButton.setOnAction(e -> matchPattern()); } @FXML @@ -26,18 +61,78 @@ public class HelloController { String inputText = inputArea.getText(); Map frequencyMap = InputAnalyzer.analyzeFrequency(inputText); List> barChartData = InputAnalyzer.getBarChartData(frequencyMap); - updateBarChart(barChart, barChartData); + InputAnalyzer.updateBarChart(barChart, barChartData); } - private void updateBarChart(BarChart barChart, List> data) { - barChart.getData().clear(); - XYChart.Series series = new XYChart.Series<>(); - series.setName("Letter Frequencies"); + private void applyChanges() { + String rules = ruleArea.getText(); + String changedText = CharacterSwitcher.applyRules(rules, inputArea.getText()); + outputArea.setText(changedText); + } - for (XYChart.Data datum : data) { - series.getData().add(new XYChart.Data<>(datum.getXValue(), datum.getYValue())); + private void loadDictionary() { + dictionaryMap = new HashMap<>(); + + try (InputStream is = getClass().getResourceAsStream("/org/lumijiez/monoalpha/dictionary.txt")) { + assert is != null; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(is))) { + + String line; + while ((line = reader.readLine()) != null) { + String[] parts = line.split(" "); + if (parts.length == 2) { + String pattern = parts[0]; + String word = parts[1]; + dictionaryMap.computeIfAbsent(pattern, k -> new ArrayList<>()).add(word); + } + } + + } + } catch (IOException e) { + e.printStackTrace(); + patternOutput.setText("Error loading dictionary"); + } + } + + private void matchPattern() { + String inputWord = patternInput.getText().trim(); + if (inputWord.isEmpty()) { + patternOutput.setText("Please enter a word."); + return; } - barChart.getData().add(series); + String inputPattern = generatePattern(inputWord); + + List matchingWords = dictionaryMap.getOrDefault(inputPattern, new ArrayList<>()); + + if (matchingWords.isEmpty()) { + patternOutput.setText("No matching words found."); + } else { + patternOutput.setText(String.join("\n", matchingWords)); + } + } + + private String generatePattern(String word) { + StringBuilder pattern = new StringBuilder(); + char nextLower = 'a'; + char nextUpper = 'A'; + Map charMap = new HashMap<>(); + + for (char c : word.toCharArray()) { + if (Character.isLowerCase(c)) { + if (!charMap.containsKey(c)) { + charMap.put(c, nextLower++); + } + pattern.append(charMap.get(c)); + } else if (Character.isUpperCase(c)) { + if (!charMap.containsKey(c)) { + charMap.put(c, nextUpper++); + } + pattern.append(charMap.get(c)); + } else { + pattern.append(c); + } + } + return pattern.toString(); } } \ No newline at end of file diff --git a/src/main/java/org/lumijiez/monoalpha/MonoAlpha.java b/src/main/java/org/lumijiez/monoalpha/MonoAlpha.java index 3a13f93..ea989c6 100644 --- a/src/main/java/org/lumijiez/monoalpha/MonoAlpha.java +++ b/src/main/java/org/lumijiez/monoalpha/MonoAlpha.java @@ -1,17 +1,27 @@ package org.lumijiez.monoalpha; +import atlantafx.base.theme.Dracula; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; +import javafx.scene.image.Image; +import javafx.scene.layout.BackgroundImage; +import javafx.scene.layout.BackgroundPosition; +import javafx.scene.layout.BackgroundRepeat; +import javafx.scene.layout.BackgroundSize; import javafx.stage.Stage; import java.io.IOException; +import java.util.Objects; -public class HelloApplication extends Application { +public class MonoAlpha extends Application { @Override public void start(Stage stage) throws IOException { - FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("monoalpha.fxml")); + + Application.setUserAgentStylesheet(new Dracula().getUserAgentStylesheet()); + FXMLLoader fxmlLoader = new FXMLLoader(MonoAlpha.class.getResource("monoalpha.fxml")); Scene scene = new Scene(fxmlLoader.load(), 1280, 720); + stage.setMinHeight(720); stage.setMinWidth(1280); stage.setTitle("MonoAlpha"); diff --git a/src/main/java/org/lumijiez/monoalpha/util/CharacterSwitcher.java b/src/main/java/org/lumijiez/monoalpha/util/CharacterSwitcher.java index 3e56324..6b53ec9 100644 --- a/src/main/java/org/lumijiez/monoalpha/util/CharacterSwitcher.java +++ b/src/main/java/org/lumijiez/monoalpha/util/CharacterSwitcher.java @@ -1,4 +1,4 @@ -package org.lumijiez.monoalpha; +package org.lumijiez.monoalpha.util; import java.util.HashMap; import java.util.Map; @@ -21,10 +21,7 @@ public class CharacterSwitcher { StringBuilder result = new StringBuilder(); for (char c : text.toCharArray()) { - char newChar = c; - while (ruleMap.containsKey(newChar)) { - newChar = ruleMap.get(newChar); - } + char newChar = ruleMap.getOrDefault(c, c); result.append(newChar); } diff --git a/src/main/java/org/lumijiez/monoalpha/util/InputAnalyzer.java b/src/main/java/org/lumijiez/monoalpha/util/InputAnalyzer.java index 073f99f..efda703 100644 --- a/src/main/java/org/lumijiez/monoalpha/util/InputAnalyzer.java +++ b/src/main/java/org/lumijiez/monoalpha/util/InputAnalyzer.java @@ -1,4 +1,4 @@ -package org.lumijiez.monoalpha; +package org.lumijiez.monoalpha.util; import javafx.scene.chart.BarChart; import javafx.scene.chart.XYChart; @@ -28,7 +28,7 @@ public class InputAnalyzer { .collect(Collectors.toList()); } - static void updateBarChart(BarChart barChart, List> data) { + public static void updateBarChart(BarChart barChart, List> data) { barChart.getData().clear(); XYChart.Series series = new XYChart.Series<>(); diff --git a/src/main/resources/org/lumijiez/monoalpha/monoalpha.fxml b/src/main/resources/org/lumijiez/monoalpha/monoalpha.fxml index 24cd355..3ab276d 100644 --- a/src/main/resources/org/lumijiez/monoalpha/monoalpha.fxml +++ b/src/main/resources/org/lumijiez/monoalpha/monoalpha.fxml @@ -1,16 +1,164 @@ - - - - + + + - - - - + + + + + + + + -