From f5037b910b592394fe10bd76a7aee9c7d3de2e4a Mon Sep 17 00:00:00 2001 From: Zoe Abrams Date: Thu, 5 Nov 2020 03:03:42 -0800 Subject: [PATCH 1/2] Update Create button with constraints Create button is disabled unless nothing is selected and all fields are filled and valid. --- .../mills/cs180a/wordui/FXMLController.java | 303 +++++++++--------- 1 file changed, 150 insertions(+), 153 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..960acdc 100644 --- a/src/main/java/edu/mills/cs180a/wordui/FXMLController.java +++ b/src/main/java/edu/mills/cs180a/wordui/FXMLController.java @@ -24,163 +24,160 @@ import javafx.scene.input.KeyEvent; public class FXMLController implements Initializable { - @FXML - private TextField wordTextField; - @FXML - private TextField frequencyTextField; - @FXML - private TextArea definitionTextArea; - @FXML - private Button removeButton; - @FXML - private Button createButton; - @FXML - private Button updateButton; - @FXML - private ListView listView; - @FXML - private ChoiceBox sortChoiceBox; - - private final ObservableList wordRecordList = FXCollections.observableArrayList(); - - private WordRecord selectedWordRecord; - private final BooleanProperty modifiedProperty = new SimpleBooleanProperty(false); - private final BooleanProperty freqValidProperty = new SimpleBooleanProperty(false); - private ChangeListener wordRecordChangeListener = new WordRecordChangeListener(); - private ChangeListener sortOrderChangeListener = - new SortOrderChangeListener(); - - // Called when the user selects or unselects a WordRecord. - private class WordRecordChangeListener implements ChangeListener { - @Override - public void changed(ObservableValue observable, WordRecord oldValue, - WordRecord newValue) { - // newValue can be null if nothing is selected. - System.out.println("Selected item: " + newValue); - selectedWordRecord = newValue; - modifiedProperty.set(false); - if (newValue != null) { - wordTextField.setText(selectedWordRecord.getWord()); - frequencyTextField.setText(Integer.toString(selectedWordRecord.getFrequency())); - freqValidProperty.set(isValidFrequency(frequencyTextField.textProperty())); - definitionTextArea.setText(selectedWordRecord.getDefinition()); - } else { - wordTextField.setText(""); - frequencyTextField.setText(""); - freqValidProperty.set(false); - definitionTextArea.setText(""); - } - } - } - - private class SortOrderChangeListener implements ChangeListener { - @Override - public void changed(ObservableValue observable, SortOrder oldValue, - SortOrder newValue) { - setSortOrder(newValue); - } - } - - private void setSortOrder(WordRecord.SortOrder newOrder) { - SortedList sortedList = new SortedList<>(wordRecordList); - sortedList.setComparator(newOrder.getComparator()); - listView.setItems(sortedList); - } - + @FXML + private TextField wordTextField; + @FXML + private TextField frequencyTextField; + @FXML + private TextArea definitionTextArea; + @FXML + private Button removeButton; + @FXML + private Button createButton; + @FXML + private Button updateButton; + @FXML + private ListView listView; + @FXML + private ChoiceBox sortChoiceBox; + + private final ObservableList wordRecordList = FXCollections.observableArrayList(); + + private WordRecord selectedWordRecord; + private final BooleanProperty modifiedProperty = new SimpleBooleanProperty(false); + private final BooleanProperty freqValidProperty = new SimpleBooleanProperty(false); + private ChangeListener wordRecordChangeListener = new WordRecordChangeListener(); + private ChangeListener sortOrderChangeListener = + new SortOrderChangeListener(); + + // Called when the user selects or unselects a WordRecord. + private class WordRecordChangeListener implements ChangeListener { @Override - public void initialize(URL url, ResourceBundle rb) { - // Initialize the list. - SampleData.fillSampleData(wordRecordList); - - configureButtons(); - - // Sort list alphabetically. - setSortOrder(WordRecord.SortOrder.ALPHABETICALLY_FORWARD); - - populateChoiceBox(); - addListeners(); - - // Pre-select the first item. - listView.getSelectionModel().selectFirst(); - } - - - - private void populateChoiceBox() { - sortChoiceBox.setItems(FXCollections.observableArrayList( - WordRecord.SortOrder.values())); - sortChoiceBox.setValue(WordRecord.SortOrder.ALPHABETICALLY_FORWARD); - } - - private void configureButtons() { - // Disable the Remove button if nothing is selected in the ListView control. - removeButton.disableProperty() - .bind(listView.getSelectionModel().selectedItemProperty().isNull()); - - // Disable the Update button if nothing is selected, no modifications have - // been made, or any field is empty or invalid. - updateButton.disableProperty() - .bind(listView.getSelectionModel().selectedItemProperty().isNull() - .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. - } - - // 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; - } catch (NumberFormatException e) { - return false; - } - } - - private void addListeners() { - listView.getSelectionModel().selectedItemProperty().addListener(wordRecordChangeListener); - sortChoiceBox.getSelectionModel().selectedItemProperty() - .addListener(sortOrderChangeListener); - } - - @FXML - private void handleKeyAction(KeyEvent keyEvent) { - modifiedProperty.set(true); + public void changed(ObservableValue observable, WordRecord oldValue, + WordRecord newValue) { + // newValue can be null if nothing is selected. + System.out.println("Selected item: " + newValue); + selectedWordRecord = newValue; + modifiedProperty.set(false); + if (newValue != null) { + wordTextField.setText(selectedWordRecord.getWord()); + frequencyTextField.setText(Integer.toString(selectedWordRecord.getFrequency())); freqValidProperty.set(isValidFrequency(frequencyTextField.textProperty())); + definitionTextArea.setText(selectedWordRecord.getDefinition()); + } else { + wordTextField.setText(""); + frequencyTextField.setText(""); + freqValidProperty.set(false); + definitionTextArea.setText(""); + } } + } - @FXML - private void createButtonAction(ActionEvent actionEvent) { - System.out.println("Create"); - WordRecord wordRecord = - new WordRecord( - wordTextField.getText(), - Integer.parseInt(frequencyTextField.getText()), - definitionTextArea.getText()); - wordRecordList.add(wordRecord); - listView.getSelectionModel().select(wordRecord); // select the new item - } - - @FXML - private void removeButtonAction(ActionEvent actionEvent) { - System.out.println("Remove " + selectedWordRecord); - wordRecordList.remove(selectedWordRecord); + private class SortOrderChangeListener implements ChangeListener { + @Override + public void changed(ObservableValue observable, SortOrder oldValue, + SortOrder newValue) { + setSortOrder(newValue); } - - @FXML - private void updateButtonAction(ActionEvent actionEvent) { - System.out.println("Update " + selectedWordRecord); - WordRecord entry = listView.getSelectionModel().getSelectedItem(); - listView.getSelectionModel().selectedItemProperty() - .removeListener(wordRecordChangeListener); - entry.setWord(wordTextField.getText()); - entry.setFrequency(Integer.parseInt(frequencyTextField.getText())); - entry.setDefinition(definitionTextArea.getText()); - listView.getSelectionModel().selectedItemProperty().addListener(wordRecordChangeListener); - modifiedProperty.set(false); + } + + private void setSortOrder(WordRecord.SortOrder newOrder) { + SortedList sortedList = new SortedList<>(wordRecordList); + sortedList.setComparator(newOrder.getComparator()); + listView.setItems(sortedList); + } + + @Override + public void initialize(URL url, ResourceBundle rb) { + // Initialize the list. + SampleData.fillSampleData(wordRecordList); + + configureButtons(); + + // Sort list alphabetically. + setSortOrder(WordRecord.SortOrder.ALPHABETICALLY_FORWARD); + + populateChoiceBox(); + addListeners(); + + // Pre-select the first item. + // listView.getSelectionModel().selectFirst(); + } + + + + private void populateChoiceBox() { + sortChoiceBox.setItems(FXCollections.observableArrayList(WordRecord.SortOrder.values())); + sortChoiceBox.setValue(WordRecord.SortOrder.ALPHABETICALLY_FORWARD); + } + + private void configureButtons() { + // Disable the Remove button if nothing is selected in the ListView control. + removeButton.disableProperty() + .bind(listView.getSelectionModel().selectedItemProperty().isNull()); + + // Disable the Update button if nothing is selected, no modifications have + // been made, or any field is empty or invalid. + updateButton.disableProperty().bind( + listView.getSelectionModel().selectedItemProperty().isNull().or(modifiedProperty.not()) + .or(freqValidProperty.not()).or(wordTextField.textProperty().isEmpty()) + .or(definitionTextArea.textProperty().isEmpty())); + + // Disable the Create button if anything is selected or any + // field is empty or invalid. + createButton.disableProperty() + .bind(listView.getSelectionModel().selectedItemProperty().isNotNull() + .or(wordTextField.textProperty().isEmpty()).or(freqValidProperty.not()) + .or(wordTextField.textProperty().isEmpty()) + .or(definitionTextArea.textProperty().isEmpty())); + } + + // 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; + } catch (NumberFormatException e) { + return false; } + } + + private void addListeners() { + listView.getSelectionModel().selectedItemProperty().addListener(wordRecordChangeListener); + sortChoiceBox.getSelectionModel().selectedItemProperty().addListener(sortOrderChangeListener); + } + + @FXML + private void handleKeyAction(KeyEvent keyEvent) { + modifiedProperty.set(true); + freqValidProperty.set(isValidFrequency(frequencyTextField.textProperty())); + } + + @FXML + private void createButtonAction(ActionEvent actionEvent) { + System.out.println("Create"); + WordRecord wordRecord = new WordRecord(wordTextField.getText(), + Integer.parseInt(frequencyTextField.getText()), definitionTextArea.getText()); + wordRecordList.add(wordRecord); + listView.getSelectionModel().select(wordRecord); // select the new item + } + + @FXML + private void removeButtonAction(ActionEvent actionEvent) { + System.out.println("Remove " + selectedWordRecord); + wordRecordList.remove(selectedWordRecord); + } + + @FXML + private void updateButtonAction(ActionEvent actionEvent) { + System.out.println("Update " + selectedWordRecord); + WordRecord entry = listView.getSelectionModel().getSelectedItem(); + listView.getSelectionModel().selectedItemProperty().removeListener(wordRecordChangeListener); + entry.setWord(wordTextField.getText()); + entry.setFrequency(Integer.parseInt(frequencyTextField.getText())); + entry.setDefinition(definitionTextArea.getText()); + listView.getSelectionModel().selectedItemProperty().addListener(wordRecordChangeListener); + modifiedProperty.set(false); + } } From 09879df43291685492bdbb798ea80693c37d6efd Mon Sep 17 00:00:00 2001 From: Zoe Abrams Date: Sun, 29 Nov 2020 12:59:35 -0800 Subject: [PATCH 2/2] Fix style to conform with remote --- .../mills/cs180a/wordui/FXMLController.java | 303 +++++++++--------- 1 file changed, 153 insertions(+), 150 deletions(-) diff --git a/src/main/java/edu/mills/cs180a/wordui/FXMLController.java b/src/main/java/edu/mills/cs180a/wordui/FXMLController.java index 960acdc..439261b 100644 --- a/src/main/java/edu/mills/cs180a/wordui/FXMLController.java +++ b/src/main/java/edu/mills/cs180a/wordui/FXMLController.java @@ -24,160 +24,163 @@ import javafx.scene.input.KeyEvent; public class FXMLController implements Initializable { - @FXML - private TextField wordTextField; - @FXML - private TextField frequencyTextField; - @FXML - private TextArea definitionTextArea; - @FXML - private Button removeButton; - @FXML - private Button createButton; - @FXML - private Button updateButton; - @FXML - private ListView listView; - @FXML - private ChoiceBox sortChoiceBox; - - private final ObservableList wordRecordList = FXCollections.observableArrayList(); - - private WordRecord selectedWordRecord; - private final BooleanProperty modifiedProperty = new SimpleBooleanProperty(false); - private final BooleanProperty freqValidProperty = new SimpleBooleanProperty(false); - private ChangeListener wordRecordChangeListener = new WordRecordChangeListener(); - private ChangeListener sortOrderChangeListener = - new SortOrderChangeListener(); - - // Called when the user selects or unselects a WordRecord. - private class WordRecordChangeListener implements ChangeListener { + @FXML + private TextField wordTextField; + @FXML + private TextField frequencyTextField; + @FXML + private TextArea definitionTextArea; + @FXML + private Button removeButton; + @FXML + private Button createButton; + @FXML + private Button updateButton; + @FXML + private ListView listView; + @FXML + private ChoiceBox sortChoiceBox; + + private final ObservableList wordRecordList = FXCollections.observableArrayList(); + + private WordRecord selectedWordRecord; + private final BooleanProperty modifiedProperty = new SimpleBooleanProperty(false); + private final BooleanProperty freqValidProperty = new SimpleBooleanProperty(false); + private ChangeListener wordRecordChangeListener = new WordRecordChangeListener(); + private ChangeListener sortOrderChangeListener = + new SortOrderChangeListener(); + + // Called when the user selects or unselects a WordRecord. + private class WordRecordChangeListener implements ChangeListener { + @Override + public void changed(ObservableValue observable, WordRecord oldValue, + WordRecord newValue) { + // newValue can be null if nothing is selected. + System.out.println("Selected item: " + newValue); + selectedWordRecord = newValue; + modifiedProperty.set(false); + if (newValue != null) { + wordTextField.setText(selectedWordRecord.getWord()); + frequencyTextField.setText(Integer.toString(selectedWordRecord.getFrequency())); + freqValidProperty.set(isValidFrequency(frequencyTextField.textProperty())); + definitionTextArea.setText(selectedWordRecord.getDefinition()); + } else { + wordTextField.setText(""); + frequencyTextField.setText(""); + freqValidProperty.set(false); + definitionTextArea.setText(""); + } + } + } + + private class SortOrderChangeListener implements ChangeListener { + @Override + public void changed(ObservableValue observable, SortOrder oldValue, + SortOrder newValue) { + setSortOrder(newValue); + } + } + + private void setSortOrder(WordRecord.SortOrder newOrder) { + SortedList sortedList = new SortedList<>(wordRecordList); + sortedList.setComparator(newOrder.getComparator()); + listView.setItems(sortedList); + } + @Override - public void changed(ObservableValue observable, WordRecord oldValue, - WordRecord newValue) { - // newValue can be null if nothing is selected. - System.out.println("Selected item: " + newValue); - selectedWordRecord = newValue; - modifiedProperty.set(false); - if (newValue != null) { - wordTextField.setText(selectedWordRecord.getWord()); - frequencyTextField.setText(Integer.toString(selectedWordRecord.getFrequency())); + public void initialize(URL url, ResourceBundle rb) { + // Initialize the list. + SampleData.fillSampleData(wordRecordList); + + configureButtons(); + + // Sort list alphabetically. + setSortOrder(WordRecord.SortOrder.ALPHABETICALLY_FORWARD); + + populateChoiceBox(); + addListeners(); + + // Pre-select the first item. + // listView.getSelectionModel().selectFirst(); + } + + + + private void populateChoiceBox() { + sortChoiceBox.setItems(FXCollections.observableArrayList(WordRecord.SortOrder.values())); + sortChoiceBox.setValue(WordRecord.SortOrder.ALPHABETICALLY_FORWARD); + } + + private void configureButtons() { + // Disable the Remove button if nothing is selected in the ListView control. + removeButton.disableProperty() + .bind(listView.getSelectionModel().selectedItemProperty().isNull()); + + // Disable the Update button if nothing is selected, no modifications have + // been made, or any field is empty or invalid. + updateButton.disableProperty().bind( + listView.getSelectionModel().selectedItemProperty().isNull() + .or(modifiedProperty.not()) + .or(freqValidProperty.not()).or(wordTextField.textProperty().isEmpty()) + .or(definitionTextArea.textProperty().isEmpty())); + + // Disable the Create button if anything is selected or any + // field is empty or invalid. + createButton.disableProperty() + .bind(listView.getSelectionModel().selectedItemProperty().isNotNull() + .or(wordTextField.textProperty().isEmpty()).or(freqValidProperty.not()) + .or(wordTextField.textProperty().isEmpty()) + .or(definitionTextArea.textProperty().isEmpty())); + } + + // 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; + } catch (NumberFormatException e) { + return false; + } + } + + private void addListeners() { + listView.getSelectionModel().selectedItemProperty().addListener(wordRecordChangeListener); + sortChoiceBox.getSelectionModel().selectedItemProperty() + .addListener(sortOrderChangeListener); + } + + @FXML + private void handleKeyAction(KeyEvent keyEvent) { + modifiedProperty.set(true); freqValidProperty.set(isValidFrequency(frequencyTextField.textProperty())); - definitionTextArea.setText(selectedWordRecord.getDefinition()); - } else { - wordTextField.setText(""); - frequencyTextField.setText(""); - freqValidProperty.set(false); - definitionTextArea.setText(""); - } } - } - private class SortOrderChangeListener implements ChangeListener { - @Override - public void changed(ObservableValue observable, SortOrder oldValue, - SortOrder newValue) { - setSortOrder(newValue); + @FXML + private void createButtonAction(ActionEvent actionEvent) { + System.out.println("Create"); + WordRecord wordRecord = new WordRecord(wordTextField.getText(), + Integer.parseInt(frequencyTextField.getText()), definitionTextArea.getText()); + wordRecordList.add(wordRecord); + listView.getSelectionModel().select(wordRecord); // select the new item } - } - - private void setSortOrder(WordRecord.SortOrder newOrder) { - SortedList sortedList = new SortedList<>(wordRecordList); - sortedList.setComparator(newOrder.getComparator()); - listView.setItems(sortedList); - } - - @Override - public void initialize(URL url, ResourceBundle rb) { - // Initialize the list. - SampleData.fillSampleData(wordRecordList); - - configureButtons(); - - // Sort list alphabetically. - setSortOrder(WordRecord.SortOrder.ALPHABETICALLY_FORWARD); - - populateChoiceBox(); - addListeners(); - - // Pre-select the first item. - // listView.getSelectionModel().selectFirst(); - } - - - - private void populateChoiceBox() { - sortChoiceBox.setItems(FXCollections.observableArrayList(WordRecord.SortOrder.values())); - sortChoiceBox.setValue(WordRecord.SortOrder.ALPHABETICALLY_FORWARD); - } - - private void configureButtons() { - // Disable the Remove button if nothing is selected in the ListView control. - removeButton.disableProperty() - .bind(listView.getSelectionModel().selectedItemProperty().isNull()); - - // Disable the Update button if nothing is selected, no modifications have - // been made, or any field is empty or invalid. - updateButton.disableProperty().bind( - listView.getSelectionModel().selectedItemProperty().isNull().or(modifiedProperty.not()) - .or(freqValidProperty.not()).or(wordTextField.textProperty().isEmpty()) - .or(definitionTextArea.textProperty().isEmpty())); - - // Disable the Create button if anything is selected or any - // field is empty or invalid. - createButton.disableProperty() - .bind(listView.getSelectionModel().selectedItemProperty().isNotNull() - .or(wordTextField.textProperty().isEmpty()).or(freqValidProperty.not()) - .or(wordTextField.textProperty().isEmpty()) - .or(definitionTextArea.textProperty().isEmpty())); - } - - // 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; - } catch (NumberFormatException e) { - return false; + + @FXML + private void removeButtonAction(ActionEvent actionEvent) { + System.out.println("Remove " + selectedWordRecord); + wordRecordList.remove(selectedWordRecord); + } + + @FXML + private void updateButtonAction(ActionEvent actionEvent) { + System.out.println("Update " + selectedWordRecord); + WordRecord entry = listView.getSelectionModel().getSelectedItem(); + listView.getSelectionModel().selectedItemProperty() + .removeListener(wordRecordChangeListener); + entry.setWord(wordTextField.getText()); + entry.setFrequency(Integer.parseInt(frequencyTextField.getText())); + entry.setDefinition(definitionTextArea.getText()); + listView.getSelectionModel().selectedItemProperty().addListener(wordRecordChangeListener); + modifiedProperty.set(false); } - } - - private void addListeners() { - listView.getSelectionModel().selectedItemProperty().addListener(wordRecordChangeListener); - sortChoiceBox.getSelectionModel().selectedItemProperty().addListener(sortOrderChangeListener); - } - - @FXML - private void handleKeyAction(KeyEvent keyEvent) { - modifiedProperty.set(true); - freqValidProperty.set(isValidFrequency(frequencyTextField.textProperty())); - } - - @FXML - private void createButtonAction(ActionEvent actionEvent) { - System.out.println("Create"); - WordRecord wordRecord = new WordRecord(wordTextField.getText(), - Integer.parseInt(frequencyTextField.getText()), definitionTextArea.getText()); - wordRecordList.add(wordRecord); - listView.getSelectionModel().select(wordRecord); // select the new item - } - - @FXML - private void removeButtonAction(ActionEvent actionEvent) { - System.out.println("Remove " + selectedWordRecord); - wordRecordList.remove(selectedWordRecord); - } - - @FXML - private void updateButtonAction(ActionEvent actionEvent) { - System.out.println("Update " + selectedWordRecord); - WordRecord entry = listView.getSelectionModel().getSelectedItem(); - listView.getSelectionModel().selectedItemProperty().removeListener(wordRecordChangeListener); - entry.setWord(wordTextField.getText()); - entry.setFrequency(Integer.parseInt(frequencyTextField.getText())); - entry.setDefinition(definitionTextArea.getText()); - listView.getSelectionModel().selectedItemProperty().addListener(wordRecordChangeListener); - modifiedProperty.set(false); - } }