From cd5ead68d5f2d82beabfd9346417d908242da20d Mon Sep 17 00:00:00 2001 From: BHamrick Date: Sun, 8 Nov 2020 20:41:30 -0800 Subject: [PATCH 1/3] Limit function of create button when input word already exisits or the fields are invalid --- .../mills/cs180a/wordui/FXMLController.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/main/java/edu/mills/cs180a/wordui/FXMLController.java b/src/main/java/edu/mills/cs180a/wordui/FXMLController.java index 849b53c..5719b12 100644 --- a/src/main/java/edu/mills/cs180a/wordui/FXMLController.java +++ b/src/main/java/edu/mills/cs180a/wordui/FXMLController.java @@ -44,6 +44,7 @@ public class FXMLController implements Initializable { private final ObservableList wordRecordList = FXCollections.observableArrayList(); private WordRecord selectedWordRecord; + private final BooleanProperty wordExistsProperty = new SimpleBooleanProperty(false); private final BooleanProperty modifiedProperty = new SimpleBooleanProperty(false); private final BooleanProperty freqValidProperty = new SimpleBooleanProperty(false); private ChangeListener wordRecordChangeListener = new WordRecordChangeListener(); @@ -62,6 +63,7 @@ public void changed(ObservableValue observable, WordRecord if (newValue != null) { wordTextField.setText(selectedWordRecord.getWord()); frequencyTextField.setText(Integer.toString(selectedWordRecord.getFrequency())); + wordExistsProperty.set(getWordExists(newValue.getWord())); freqValidProperty.set(isValidFrequency(frequencyTextField.textProperty())); definitionTextArea.setText(selectedWordRecord.getDefinition()); } else { @@ -107,8 +109,7 @@ public void initialize(URL url, ResourceBundle rb) { private void populateChoiceBox() { - sortChoiceBox.setItems(FXCollections.observableArrayList( - WordRecord.SortOrder.values())); + sortChoiceBox.setItems(FXCollections.observableArrayList(WordRecord.SortOrder.values())); sortChoiceBox.setValue(WordRecord.SortOrder.ALPHABETICALLY_FORWARD); } @@ -121,18 +122,32 @@ private void configureButtons() { // been made, or any field is empty or invalid. updateButton.disableProperty() .bind(listView.getSelectionModel().selectedItemProperty().isNull() - .or(modifiedProperty.not()) - .or(freqValidProperty.not()) + .or(modifiedProperty.not()).or(freqValidProperty.not()) .or(wordTextField.textProperty().isEmpty()) .or(definitionTextArea.textProperty().isEmpty())); // TODO: Disable the Create button if an existing entry is selected or any // field is empty or invalid. + createButton.disableProperty() + .bind(listView.getSelectionModel().selectedItemProperty().isNull() + .or(wordExistsProperty).or(modifiedProperty.not()) + .or(freqValidProperty.not()).or(wordTextField.textProperty().isEmpty()) + .or(definitionTextArea.textProperty().isEmpty())); } + // Does the word already exist in our list + private Boolean getWordExists(String w) { + for (WordRecord wr : wordRecordList) { + if (wr.getWord().equals(w.trim())) { + return true; + } + } + return false; + } + + // A frequency is valid if it is an integer and is at least 0. private boolean isValidFrequency(StringProperty sp) { - System.out.println("isLegalFrequency(" + sp.get() + ")"); try { int value = Integer.parseInt(sp.get()); return value >= 0; @@ -151,16 +166,14 @@ private void addListeners() { private void handleKeyAction(KeyEvent keyEvent) { modifiedProperty.set(true); freqValidProperty.set(isValidFrequency(frequencyTextField.textProperty())); + wordExistsProperty.set(getWordExists(wordTextField.getText())); } @FXML private void createButtonAction(ActionEvent actionEvent) { System.out.println("Create"); - WordRecord wordRecord = - new WordRecord( - wordTextField.getText(), - Integer.parseInt(frequencyTextField.getText()), - definitionTextArea.getText()); + WordRecord wordRecord = new WordRecord(wordTextField.getText(), + Integer.parseInt(frequencyTextField.getText()), definitionTextArea.getText()); wordRecordList.add(wordRecord); listView.getSelectionModel().select(wordRecord); // select the new item } From 708395517e3f5e15677ecaaea55293e8d76330cd Mon Sep 17 00:00:00 2001 From: BHamrick Date: Sun, 8 Nov 2020 20:49:00 -0800 Subject: [PATCH 2/3] Ignore case and remove todo --- src/main/java/edu/mills/cs180a/wordui/FXMLController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/mills/cs180a/wordui/FXMLController.java b/src/main/java/edu/mills/cs180a/wordui/FXMLController.java index 5719b12..1f1ddd5 100644 --- a/src/main/java/edu/mills/cs180a/wordui/FXMLController.java +++ b/src/main/java/edu/mills/cs180a/wordui/FXMLController.java @@ -126,7 +126,7 @@ private void configureButtons() { .or(wordTextField.textProperty().isEmpty()) .or(definitionTextArea.textProperty().isEmpty())); - // TODO: Disable the Create button if an existing entry is selected or any + // Disable the Create button if an existing entry is selected or any // field is empty or invalid. createButton.disableProperty() .bind(listView.getSelectionModel().selectedItemProperty().isNull() @@ -138,7 +138,7 @@ private void configureButtons() { // Does the word already exist in our list private Boolean getWordExists(String w) { for (WordRecord wr : wordRecordList) { - if (wr.getWord().equals(w.trim())) { + if (wr.getWord().equalsIgnoreCase(w.trim())) { return true; } } From c34c884ddcc8f8f88690879cecfe172010aa9189 Mon Sep 17 00:00:00 2001 From: BHamrick Date: Tue, 24 Nov 2020 16:36:31 -0800 Subject: [PATCH 3/3] Refactor method name --- .../java/edu/mills/cs180a/wordui/FXMLController.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/edu/mills/cs180a/wordui/FXMLController.java b/src/main/java/edu/mills/cs180a/wordui/FXMLController.java index 1f1ddd5..53be716 100644 --- a/src/main/java/edu/mills/cs180a/wordui/FXMLController.java +++ b/src/main/java/edu/mills/cs180a/wordui/FXMLController.java @@ -63,7 +63,7 @@ public void changed(ObservableValue observable, WordRecord if (newValue != null) { wordTextField.setText(selectedWordRecord.getWord()); frequencyTextField.setText(Integer.toString(selectedWordRecord.getFrequency())); - wordExistsProperty.set(getWordExists(newValue.getWord())); + wordExistsProperty.set(isNewWord(newValue.getWord())); freqValidProperty.set(isValidFrequency(frequencyTextField.textProperty())); definitionTextArea.setText(selectedWordRecord.getDefinition()); } else { @@ -130,19 +130,19 @@ private void configureButtons() { // field is empty or invalid. createButton.disableProperty() .bind(listView.getSelectionModel().selectedItemProperty().isNull() - .or(wordExistsProperty).or(modifiedProperty.not()) + .or(wordExistsProperty.not()).or(modifiedProperty.not()) .or(freqValidProperty.not()).or(wordTextField.textProperty().isEmpty()) .or(definitionTextArea.textProperty().isEmpty())); } // Does the word already exist in our list - private Boolean getWordExists(String w) { + private boolean isNewWord(String w) { for (WordRecord wr : wordRecordList) { if (wr.getWord().equalsIgnoreCase(w.trim())) { - return true; + return false; } } - return false; + return true; } @@ -166,7 +166,7 @@ private void addListeners() { private void handleKeyAction(KeyEvent keyEvent) { modifiedProperty.set(true); freqValidProperty.set(isValidFrequency(frequencyTextField.textProperty())); - wordExistsProperty.set(getWordExists(wordTextField.getText())); + wordExistsProperty.set(isNewWord(wordTextField.getText())); } @FXML