Как я могу проверить, является ли ячейка редактирования в табличном представлении javafx правильной, и если это не так: как я могу вернуть значение ячейки обратно? - PullRequest
0 голосов
/ 14 февраля 2019

Я сделал редактируемую таблицу с TableView в JavaFX.Теперь я хочу проверить правильность ввода.Если это неправильно, я хочу сбросить значение ячейки до старого значения.Как я редактирую «55» в ячейке на «160».Я хочу, чтобы после нажатия Enter значение "160" исчезало.Я сделал это так:

public void handle(CellEditEvent event) {
    if (groups_list.get(table_persona.getSelectionModel().getSelectedIndex()).getAge() > 100) {
        Number a = (Number) event.getNewValue();
        ((Persona) event.getTableView().getItems().get(
            event.getTablePosition().getRow()
        )).setAge(a.intValue());
    } else {
        Number a = groups_list.get(table_persona.getSelectionModel().getSelectedIndex()).getAge();
        ((Persona) event.getTableView().getItems().get(
            event.getTablePosition().getRow()
        )).setAge(a.intValue());
        error_message_group.textProperty().set("to old");
    }
    table_groups.setItems(persona_list);
}

но это не работает."160" все еще там.Только если я снова нажму в ячейке, снова появится «55».

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Обновление вызова в посте выше:

table_group.refresh();

требуется для обновления таблицы с новым или старым значением.

Вот как яобрабатывать проверку двойного значения в ячейке:

@FXML
private void changeDiameter(CellEditEvent<?, ?> edittedCell) {
    // get the selected item in the diameter column
    MillToolTable toolSelected = toolTable.getSelectionModel().getSelectedItem();
    try {
        // force an error if the value cannot be converted to a double value
        Double temp = Double.parseDouble(edittedCell.getNewValue().toString()); 
        // make sure the number is positive
        if (temp < 0) {
             // display an alert message to tell the user they have entered an invalid diameter
            Alert alert = new Alert(AlertType.WARNING);
            // set the title of the window 
            alert.setTitle("Invalid tool diameter");
            // eliminate the header text area from the window
            alert.setHeaderText(null);
            // display the following message
            alert.setContentText("Please enter a positive number for the tool's diameter.");
            // get the stage variable for the alert window
            Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
            // make is display on top of open windows
            stage.setAlwaysOnTop(true);
            // finally show the alert window
            alert.show();   
            // refresh the table to display the old value
            toolTable.refresh();
            // exit this method and do not set the tool length property to the updated value
            return;
        }
    } catch (Exception e) {
         // display an alert message to tell the user they have entered an invalid diameter
        Alert alert = new Alert(AlertType.WARNING);
        // set the title of the window 
        alert.setTitle("Invalid tool diameter");
        // eliminate the header text area from the window
        alert.setHeaderText(null);
        // display the following message
        alert.setContentText("Please enter a positive number for the tool's diameter.");
        // get the stage variable for the alert window
        Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
        // make is display on top of open windows
        stage.setAlwaysOnTop(true);
        // finally show the alert window
        alert.show();   
        // remove the invalid data from the table and load the old, valid value
        toolTable.refresh();
        // exit this method and do not set the tool length property to the updated value
        return;
    }       
0 голосов
/ 18 февраля 2019

Ответом является метод refresh ():

    public void handle(CellEditEvent event) {
        if (groups_list.get(table_persona.getSelectionModel().getSelectedIndex()).getAge() > 100) {
            Number a = (Number) event.getNewValue();
            ((Persona) event.getTableView().getItems().get(
                event.getTablePosition().getRow()
            )).setAge(a.intValue());
        } else {
       error_message_group.textProperty().set("to old");
       table_group.refresh();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...