From 39624fa4f20e3c1dde0e3c648898edcd934bcf51 Mon Sep 17 00:00:00 2001 From: Luka Date: Wed, 27 Feb 2019 11:04:08 +0100 Subject: [PATCH] Fixed multiple notifications for one Error bug --- src/main/java/gui/CharacterAnalysisTab.java | 131 ++++++++------ src/main/java/gui/OneWordAnalysisTab.java | 169 +++++++++++------- src/main/java/gui/StringAnalysisTabNew2.java | 175 ++++++++++++------- src/main/java/gui/WordLevelTab.java | 169 +++++++++++------- 4 files changed, 395 insertions(+), 249 deletions(-) diff --git a/src/main/java/gui/CharacterAnalysisTab.java b/src/main/java/gui/CharacterAnalysisTab.java index c6e101c..1cd3e80 100755 --- a/src/main/java/gui/CharacterAnalysisTab.java +++ b/src/main/java/gui/CharacterAnalysisTab.java @@ -175,6 +175,9 @@ public class CharacterAnalysisTab { private boolean useDb; private HostServices hostService; private ListChangeListener taxonomyListener; + private ChangeListener msdListener; + private ChangeListener minimalOccurrencesListener; + private ChangeListener minimalTaxonomyListener; private static final String [] N_GRAM_COMPUTE_FOR_LETTERS_ARRAY = {"calculateFor.WORD", "calculateFor.LEMMA"}; private static final ArrayList N_GRAM_COMPUTE_FOR_LETTERS = new ArrayList<>(Arrays.asList(N_GRAM_COMPUTE_FOR_LETTERS_ARRAY)); @@ -236,36 +239,44 @@ public class CharacterAnalysisTab { taxonomySetOperationCB.getSelectionModel().select(0); - // msd - msdTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = msdTF.getText(); - logger.info("msdTf: ", value); + if (msdListener != null){ + msdTF.focusedProperty().removeListener(msdListener); + } - if (!ValidationUtil.isEmpty(value)) { - ArrayList msdTmp = new ArrayList<>(Arrays.asList(value.split(" "))); + // msd + msdListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = msdTF.getText(); + logger.info("msdTf: ", value); + + if (!ValidationUtil.isEmpty(value)) { + ArrayList msdTmp = new ArrayList<>(Arrays.asList(value.split(" "))); + + int nOfRequiredMsdTokens = 1; + if (msdTmp.size() != nOfRequiredMsdTokens) { + String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size()); + logAlert(msg); + showAlert(Alert.AlertType.ERROR, msg); + } + msd = new ArrayList<>(); + msdStrings = new ArrayList<>(); + for (String msdToken : msdTmp) { + msd.add(Pattern.compile(msdToken)); + msdStrings.add(msdToken); + } + logger.info(String.format("msd accepted (%d)", msd.size())); - int nOfRequiredMsdTokens = 1; - if (msdTmp.size() != nOfRequiredMsdTokens) { - String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size()); - logAlert(msg); - showAlert(Alert.AlertType.ERROR, msg); + } else if (!ValidationUtil.isEmpty(newValue)) { + msd = new ArrayList<>(); + msdStrings = new ArrayList<>(); } - msd = new ArrayList<>(); - msdStrings = new ArrayList<>(); - for (String msdToken : msdTmp) { - msd.add(Pattern.compile(msdToken)); - msdStrings.add(msdToken); - } - logger.info(String.format("msd accepted (%d)", msd.size())); - - } else if (!ValidationUtil.isEmpty(newValue)) { - msd = new ArrayList<>(); - msdStrings = new ArrayList<>(); } } - }); + }; + msdTF.focusedProperty().addListener(msdListener); msdTF.setText(""); msd = new ArrayList<>(); @@ -381,41 +392,59 @@ public class CharacterAnalysisTab { minimalTaxonomyTF.setDisable(true); - minimalOccurrencesTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = minimalOccurrencesTF.getText(); - if (!ValidationUtil.isEmpty(value)) { - if (!ValidationUtil.isNumber(value)) { - logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); - showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + if (minimalOccurrencesListener != null){ + minimalOccurrencesTF.focusedProperty().removeListener(minimalOccurrencesListener); + } + + // msd + minimalOccurrencesListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = minimalOccurrencesTF.getText(); + if (!ValidationUtil.isEmpty(value)) { + if (!ValidationUtil.isNumber(value)) { + logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + } else { + minimalOccurrences = Integer.parseInt(value); + } } else { - minimalOccurrences = Integer.parseInt(value); + minimalOccurrencesTF.setText("1"); + minimalOccurrences = 1; } - } else { - minimalOccurrencesTF.setText("1"); - minimalOccurrences = 1; } } - }); + }; + minimalOccurrencesTF.focusedProperty().addListener(minimalOccurrencesListener); - minimalTaxonomyTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = minimalTaxonomyTF.getText(); - if (!ValidationUtil.isEmpty(value)) { - if (!ValidationUtil.isNumber(value)) { - logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); - showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + + if (minimalTaxonomyListener != null){ + minimalTaxonomyTF.focusedProperty().removeListener(minimalTaxonomyListener); + } + + minimalTaxonomyListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = minimalTaxonomyTF.getText(); + if (!ValidationUtil.isEmpty(value)) { + if (!ValidationUtil.isNumber(value)) { + logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + } else { + minimalTaxonomy = Integer.parseInt(value); + } } else { - minimalTaxonomy = Integer.parseInt(value); + minimalTaxonomyTF.setText("1"); + minimalTaxonomy = 1; } - } else { - minimalTaxonomyTF.setText("1"); - minimalTaxonomy = 1; } } - }); + }; + minimalTaxonomyTF.focusedProperty().addListener(minimalTaxonomyListener); computeNgramsB.setOnAction(e -> { compute(); diff --git a/src/main/java/gui/OneWordAnalysisTab.java b/src/main/java/gui/OneWordAnalysisTab.java index 346c3e9..84306bb 100755 --- a/src/main/java/gui/OneWordAnalysisTab.java +++ b/src/main/java/gui/OneWordAnalysisTab.java @@ -192,6 +192,10 @@ public class OneWordAnalysisTab { private ListChangeListener taxonomyListener; private ListChangeListener alsoVisualizeListener; private ChangeListener calculateForListener; + private ChangeListener msdListener; + private ChangeListener minimalOccurrencesListener; + private ChangeListener minimalTaxonomyListener; + private ChangeListener minimalRelFreListener; // private static final ObservableList N_GRAM_COMPUTE_FOR_WORDS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka"); // private static final ObservableList N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica"); @@ -367,36 +371,45 @@ public class OneWordAnalysisTab { taxonomySetOperationCB.getSelectionModel().select(0); + if (msdListener != null){ + msdTF.focusedProperty().removeListener(msdListener); + } + // msd - msdTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = msdTF.getText(); - logger.info("msdTf: ", value); - - if (!ValidationUtil.isEmpty(value)) { - ArrayList msdTmp = new ArrayList<>(Arrays.asList(value.split(" "))); - - int nOfRequiredMsdTokens = 1; - if (msdTmp.size() != nOfRequiredMsdTokens) { - String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size()); - logAlert(msg); - showAlert(Alert.AlertType.ERROR, msg); - } - msd = new ArrayList<>(); - msdStrings = new ArrayList<>(); - for (String msdToken : msdTmp) { - msd.add(Pattern.compile(msdToken)); - msdStrings.add(msdToken); + msdListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = msdTF.getText(); + logger.info("msdTf: ", value); + + if (!ValidationUtil.isEmpty(value)) { + ArrayList msdTmp = new ArrayList<>(Arrays.asList(value.split(" "))); + + int nOfRequiredMsdTokens = 1; + if (msdTmp.size() != nOfRequiredMsdTokens) { + String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size()); + logAlert(msg); + showAlert(Alert.AlertType.ERROR, msg); + } + msd = new ArrayList<>(); + msdStrings = new ArrayList<>(); + for (String msdToken : msdTmp) { + msd.add(Pattern.compile(msdToken)); + msdStrings.add(msdToken); + } + logger.info(String.format("msd accepted (%d)", msd.size())); + + } else if (!ValidationUtil.isEmpty(newValue)) { + msd = new ArrayList<>(); + msdStrings = new ArrayList<>(); } - logger.info(String.format("msd accepted (%d)", msd.size())); - - } else if (!ValidationUtil.isEmpty(newValue)) { - msd = new ArrayList<>(); - msdStrings = new ArrayList<>(); } } - }); + }; + + msdTF.focusedProperty().addListener(msdListener); msdTF.setText(""); msd = new ArrayList<>(); @@ -535,63 +548,89 @@ public class OneWordAnalysisTab { minimalTaxonomyTF.setDisable(true); - minimalOccurrencesTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = minimalOccurrencesTF.getText(); - if (!ValidationUtil.isEmpty(value)) { - if (!ValidationUtil.isNumber(value)) { - logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); - GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + if (minimalOccurrencesListener != null){ + minimalOccurrencesTF.focusedProperty().removeListener(minimalOccurrencesListener); + } + + // msd + minimalOccurrencesListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = minimalOccurrencesTF.getText(); + if (!ValidationUtil.isEmpty(value)) { + if (!ValidationUtil.isNumber(value)) { + logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + } else { + minimalOccurrences = Integer.parseInt(value); + } } else { - minimalOccurrences = Integer.parseInt(value); + minimalOccurrencesTF.setText("1"); + minimalOccurrences = 1; } - } else { - minimalOccurrencesTF.setText("1"); - minimalOccurrences = 1; } } - }); + }; + minimalOccurrencesTF.focusedProperty().addListener(minimalOccurrencesListener); - minimalTaxonomyTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = minimalTaxonomyTF.getText(); - if (!ValidationUtil.isEmpty(value)) { - if (!ValidationUtil.isNumber(value)) { - logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); - GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + + if (minimalTaxonomyListener != null){ + minimalTaxonomyTF.focusedProperty().removeListener(minimalTaxonomyListener); + } + + minimalTaxonomyListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = minimalTaxonomyTF.getText(); + if (!ValidationUtil.isEmpty(value)) { + if (!ValidationUtil.isNumber(value)) { + logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + } else { + minimalTaxonomy = Integer.parseInt(value); + } } else { - minimalTaxonomy = Integer.parseInt(value); + minimalTaxonomyTF.setText("1"); + minimalTaxonomy = 1; } - } else { - minimalTaxonomyTF.setText("1"); - minimalTaxonomy = 1; } } - }); + }; + minimalTaxonomyTF.focusedProperty().addListener(minimalTaxonomyListener); // set default values minimalRelFreTF.setText("1"); minimalRelFre = 1; - minimalRelFreTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = minimalRelFreTF.getText(); - if (!ValidationUtil.isEmpty(value)) { - if (!ValidationUtil.isNumber(value)) { - logAlert("minimalRelFreTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); - GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + if (minimalRelFreListener != null){ + minimalRelFreTF.focusedProperty().removeListener(minimalRelFreListener); + } + + minimalRelFreListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = minimalRelFreTF.getText(); + if (!ValidationUtil.isEmpty(value)) { + if (!ValidationUtil.isNumber(value)) { + logAlert("minimalRelFreTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + } else { + minimalRelFre = Integer.parseInt(value); + } } else { - minimalRelFre = Integer.parseInt(value); + minimalRelFreTF.setText("1"); + minimalRelFre = 1; } - } else { - minimalRelFreTF.setText("1"); - minimalRelFre = 1; } } - }); + }; + minimalRelFreTF.focusedProperty().addListener(minimalRelFreListener); changeLanguageB.setOnAction(e -> { diff --git a/src/main/java/gui/StringAnalysisTabNew2.java b/src/main/java/gui/StringAnalysisTabNew2.java index 38af7a4..2c2152e 100755 --- a/src/main/java/gui/StringAnalysisTabNew2.java +++ b/src/main/java/gui/StringAnalysisTabNew2.java @@ -232,6 +232,10 @@ public class StringAnalysisTabNew2 { private ListChangeListener alsoVisualizeListener; private ListChangeListener collocabilityListener; private ChangeListener calculateForListener; + private ChangeListener msdListener; + private ChangeListener minimalOccurrencesListener; + private ChangeListener minimalTaxonomyListener; + private ChangeListener minimalRelFreListener; // private static final ObservableList N_GRAM_COMPUTE_FOR_WORDS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka"); // private static final ObservableList N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica"); @@ -318,9 +322,6 @@ public class StringAnalysisTabNew2 { ngramValue = 2; // actual value at that index // set default values - minimalOccurrencesTF.setText("1"); - minimalOccurrences = 1; - minimalTaxonomyTF.setText("1"); minimalTaxonomy = 1; @@ -511,35 +512,44 @@ public class StringAnalysisTabNew2 { // msd - msdTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = msdTF.getText(); - logger.info("msdTf: ", value); - - if (!ValidationUtil.isEmpty(value)) { - ArrayList msdTmp = new ArrayList<>(Arrays.asList(value.split(" "))); - - int nOfRequiredMsdTokens = ngramValue == 0 ? 1 : ngramValue; - if (msdTmp.size() != nOfRequiredMsdTokens) { - String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size()); - logAlert(msg); - showAlert(Alert.AlertType.ERROR, msg); - } - msd = new ArrayList<>(); - msdStrings = new ArrayList<>(); - for (String msdToken : msdTmp) { - msd.add(Pattern.compile(msdToken)); - msdStrings.add(msdToken); - } - logger.info(String.format("msd accepted (%d)", msd.size())); + if (msdListener != null){ + msdTF.focusedProperty().removeListener(msdListener); + } - } else if (!ValidationUtil.isEmpty(newValue)) { - msd = new ArrayList<>(); - msdStrings = new ArrayList<>(); + // msd + msdListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = msdTF.getText(); + logger.info("msdTf: ", value); + + if (!ValidationUtil.isEmpty(value)) { + ArrayList msdTmp = new ArrayList<>(Arrays.asList(value.split(" "))); + + int nOfRequiredMsdTokens = ngramValue == 0 ? 1 : ngramValue; + if (msdTmp.size() != nOfRequiredMsdTokens) { + String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size()); + logAlert(msg); + showAlert(Alert.AlertType.ERROR, msg); + } + msd = new ArrayList<>(); + msdStrings = new ArrayList<>(); + for (String msdToken : msdTmp) { + msd.add(Pattern.compile(msdToken)); + msdStrings.add(msdToken); + } + logger.info(String.format("msd accepted (%d)", msd.size())); + + } else if (!ValidationUtil.isEmpty(newValue)) { + msd = new ArrayList<>(); + msdStrings = new ArrayList<>(); + } } } - }); + }; + msdTF.focusedProperty().addListener(msdListener); msdTF.setText(""); msd = new ArrayList<>(); @@ -662,63 +672,92 @@ public class StringAnalysisTabNew2 { // } // }); - minimalOccurrencesTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = minimalOccurrencesTF.getText(); - if (!ValidationUtil.isEmpty(value)) { - if (!ValidationUtil.isNumber(value)) { - logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); - GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + minimalOccurrencesTF.setText("1"); + minimalOccurrences = 1; + + if (minimalOccurrencesListener != null){ + minimalOccurrencesTF.focusedProperty().removeListener(minimalOccurrencesListener); + } + + // msd + minimalOccurrencesListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = minimalOccurrencesTF.getText(); + if (!ValidationUtil.isEmpty(value)) { + if (!ValidationUtil.isNumber(value)) { + logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + } else { + minimalOccurrences = Integer.parseInt(value); + } } else { - minimalOccurrences = Integer.parseInt(value); + minimalOccurrencesTF.setText("1"); + minimalOccurrences = 1; } - } else { - minimalOccurrencesTF.setText("1"); - minimalOccurrences = 1; } } - }); + }; + minimalOccurrencesTF.focusedProperty().addListener(minimalOccurrencesListener); - minimalTaxonomyTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = minimalTaxonomyTF.getText(); - if (!ValidationUtil.isEmpty(value)) { - if (!ValidationUtil.isNumber(value)) { - logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); - GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + + if (minimalTaxonomyListener != null){ + minimalTaxonomyTF.focusedProperty().removeListener(minimalTaxonomyListener); + } + + minimalTaxonomyListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = minimalTaxonomyTF.getText(); + if (!ValidationUtil.isEmpty(value)) { + if (!ValidationUtil.isNumber(value)) { + logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + } else { + minimalTaxonomy = Integer.parseInt(value); + } } else { - minimalTaxonomy = Integer.parseInt(value); + minimalTaxonomyTF.setText("1"); + minimalTaxonomy = 1; } - } else { - minimalTaxonomyTF.setText("1"); - minimalTaxonomy = 1; } } - }); + }; + minimalTaxonomyTF.focusedProperty().addListener(minimalTaxonomyListener); // set default values minimalRelFreTF.setText("1"); minimalRelFre = 1; - minimalRelFreTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = minimalRelFreTF.getText(); - if (!ValidationUtil.isEmpty(value)) { - if (!ValidationUtil.isNumber(value)) { - logAlert("minimalRelFreTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); - GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + if (minimalRelFreListener != null){ + minimalRelFreTF.focusedProperty().removeListener(minimalRelFreListener); + } + + minimalRelFreListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = minimalRelFreTF.getText(); + if (!ValidationUtil.isEmpty(value)) { + if (!ValidationUtil.isNumber(value)) { + logAlert("minimalRelFreTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + } else { + minimalRelFre = Integer.parseInt(value); + } } else { - minimalRelFre = Integer.parseInt(value); + minimalRelFreTF.setText("1"); + minimalRelFre = 1; } - } else { - minimalRelFreTF.setText("1"); - minimalRelFre = 1; } } - }); + }; + minimalRelFreTF.focusedProperty().addListener(minimalRelFreListener); changeLanguageB.setOnAction(e -> { diff --git a/src/main/java/gui/WordLevelTab.java b/src/main/java/gui/WordLevelTab.java index 2625486..0df7ec5 100755 --- a/src/main/java/gui/WordLevelTab.java +++ b/src/main/java/gui/WordLevelTab.java @@ -221,6 +221,10 @@ public class WordLevelTab { private ListChangeListener taxonomyListener; private ListChangeListener alsoVisualizeListener; private ChangeListener calculateForListener; + private ChangeListener msdListener; + private ChangeListener minimalOccurrencesListener; + private ChangeListener minimalTaxonomyListener; + private ChangeListener minimalRelFreListener; // private static final ObservableList N_GRAM_COMPUTE_FOR_WORDS = FXCollections.observableArrayList("lema", "različnica"); // private static final ObservableList N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica"); @@ -491,36 +495,45 @@ public class WordLevelTab { // prefixLengthCB.setDisable(true); + if (msdListener != null){ + msdTF.focusedProperty().removeListener(msdListener); + } + // msd - msdTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = msdTF.getText(); - logger.info("msdTf: ", value); - - if (!ValidationUtil.isEmpty(value)) { - ArrayList msdTmp = new ArrayList<>(Arrays.asList(value.split(" "))); - - int nOfRequiredMsdTokens = 1; - if (msdTmp.size() != nOfRequiredMsdTokens) { - String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size()); - logAlert(msg); - showAlert(Alert.AlertType.ERROR, msg); - } - msd = new ArrayList<>(); - msdStrings = new ArrayList<>(); - for (String msdToken : msdTmp) { - msd.add(Pattern.compile(msdToken)); - msdStrings.add(msdToken); + msdListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = msdTF.getText(); + logger.info("msdTf: ", value); + + if (!ValidationUtil.isEmpty(value)) { + ArrayList msdTmp = new ArrayList<>(Arrays.asList(value.split(" "))); + + int nOfRequiredMsdTokens = 1; + if (msdTmp.size() != nOfRequiredMsdTokens) { + String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size()); + logAlert(msg); + showAlert(Alert.AlertType.ERROR, msg); + } + msd = new ArrayList<>(); + msdStrings = new ArrayList<>(); + for (String msdToken : msdTmp) { + msd.add(Pattern.compile(msdToken)); + msdStrings.add(msdToken); + } + logger.info(String.format("msd accepted (%d)", msd.size())); + + } else if (!ValidationUtil.isEmpty(newValue)) { + msd = new ArrayList<>(); + msdStrings = new ArrayList<>(); } - logger.info(String.format("msd accepted (%d)", msd.size())); - - } else if (!ValidationUtil.isEmpty(newValue)) { - msd = new ArrayList<>(); - msdStrings = new ArrayList<>(); } } - }); + }; + + msdTF.focusedProperty().addListener(msdListener); msdTF.setText(""); msd = new ArrayList<>(); @@ -644,63 +657,89 @@ public class WordLevelTab { minimalTaxonomyTF.setDisable(true); - minimalOccurrencesTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = minimalOccurrencesTF.getText(); - if (!ValidationUtil.isEmpty(value)) { - if (!ValidationUtil.isNumber(value)) { - logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); - GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + if (minimalOccurrencesListener != null){ + minimalOccurrencesTF.focusedProperty().removeListener(minimalOccurrencesListener); + } + + // msd + minimalOccurrencesListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = minimalOccurrencesTF.getText(); + if (!ValidationUtil.isEmpty(value)) { + if (!ValidationUtil.isNumber(value)) { + logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + } else { + minimalOccurrences = Integer.parseInt(value); + } } else { - minimalOccurrences = Integer.parseInt(value); + minimalOccurrencesTF.setText("1"); + minimalOccurrences = 1; } - } else { - minimalOccurrencesTF.setText("1"); - minimalOccurrences = 1; } } - }); + }; + minimalOccurrencesTF.focusedProperty().addListener(minimalOccurrencesListener); - minimalTaxonomyTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = minimalTaxonomyTF.getText(); - if (!ValidationUtil.isEmpty(value)) { - if (!ValidationUtil.isNumber(value)) { - logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); - GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + + if (minimalTaxonomyListener != null){ + minimalTaxonomyTF.focusedProperty().removeListener(minimalTaxonomyListener); + } + + minimalTaxonomyListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = minimalTaxonomyTF.getText(); + if (!ValidationUtil.isEmpty(value)) { + if (!ValidationUtil.isNumber(value)) { + logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + } else { + minimalTaxonomy = Integer.parseInt(value); + } } else { - minimalTaxonomy = Integer.parseInt(value); + minimalTaxonomyTF.setText("1"); + minimalTaxonomy = 1; } - } else { - minimalTaxonomyTF.setText("1"); - minimalTaxonomy = 1; } } - }); + }; + minimalTaxonomyTF.focusedProperty().addListener(minimalTaxonomyListener); // set default values minimalRelFreTF.setText("1"); minimalRelFre = 1; - minimalRelFreTF.focusedProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue) { - // focus lost - String value = minimalRelFreTF.getText(); - if (!ValidationUtil.isEmpty(value)) { - if (!ValidationUtil.isNumber(value)) { - logAlert("minimalRelFreTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); - GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + if (minimalRelFreListener != null){ + minimalRelFreTF.focusedProperty().removeListener(minimalRelFreListener); + } + + minimalRelFreListener = new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + if (!newValue) { + // focus lost + String value = minimalRelFreTF.getText(); + if (!ValidationUtil.isEmpty(value)) { + if (!ValidationUtil.isNumber(value)) { + logAlert("minimalRelFreTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED")); + } else { + minimalRelFre = Integer.parseInt(value); + } } else { - minimalRelFre = Integer.parseInt(value); + minimalRelFreTF.setText("1"); + minimalRelFre = 1; } - } else { - minimalRelFreTF.setText("1"); - minimalRelFre = 1; } } - }); + }; + minimalRelFreTF.focusedProperty().addListener(minimalRelFreListener); changeLanguageB.setOnAction(e -> {