ControlsFx - просмотр таблицы - DateCell - продолжить редактирование при сбое - PullRequest
0 голосов
/ 27 февраля 2019

мы используем электронную таблицу с различными типами ячеек.

В документации к SpreadsheetCellEditor мы нашли следующий текст:

Политика проверки заданного значения определена в SpreadsheetCellType.match (Object).Если значение не соответствует требованиям при сохранении ячейки, ничего не происходит, и редактор продолжает редактирование.


Теперь мы сталкиваемся со следующей проблемой:

, если вы введете«abcd» в целочисленной ячейке как неверный ввод и нажмите клавишу ввода, ничего не происходит.Редактор все еще находится в режиме редактирования.Это именно то поведение, как описано в документации.это то, что мы хотим.

если у вас есть ячейка с датой и вы ввели неправильную дату или что-то еще и нажали клавишу ввода, ячейка прекращает режим редактирования и устанавливает значение, возвращаемое к «старому» значению.

как мы можем предотвратить это поведение?Может быть, это ошибка в Date SpreadsheetCellType?

мы используем много пользовательских классов cellType, но поведение также понятно с этим небольшим примером.

Надеюсь, все хорошо объяснено.

Спасибо за вашу помощь.

import java.time.LocalDate;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import org.controlsfx.control.spreadsheet.GridBase;
import org.controlsfx.control.spreadsheet.SpreadsheetCell;
import org.controlsfx.control.spreadsheet.SpreadsheetCellType;
import org.controlsfx.control.spreadsheet.SpreadsheetView;

public class SpreadSheetExample extends Application {

private SpreadsheetView getSpreadSheet() {
    SpreadsheetView spreadSheetView;
    GridBase grid;
    grid = new GridBase(10, 2);
    spreadSheetView = new SpreadsheetView(grid);

    ObservableList<ObservableList<SpreadsheetCell>> rows = FXCollections.observableArrayList();
    for (int row = 0; row < grid.getRowCount(); ++row) {
        final ObservableList<SpreadsheetCell> list = FXCollections.observableArrayList();
        for (int column = 0; column < grid.getColumnCount(); ++column) {
            if (column < 1) {
                list.add(SpreadsheetCellType.DATE.createCell(row, column, 1, 1, LocalDate.now()));
            } else {
                list.add(SpreadsheetCellType.INTEGER.createCell(row, column, 1, 1, column));
            }

        }
        rows.add(list);
    }

    spreadSheetView.getColumns().forEach((column) -> {
        column.setPrefWidth(280);
    });

    grid.setRows(rows);

    return spreadSheetView;
}

@Override
public void start(Stage primaryStage) {

    StackPane root = new StackPane();
    root.getChildren().add(getSpreadSheet());

    Scene scene = new Scene(root, 800, 400);

    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}

}

Обновление: нет экспертов по controlfx?

Решено: https://groups.google.com/forum/#!topic/controlsfx-dev/ro7-MvLFD1A

1 Ответ

0 голосов
/ 05 марта 2019

решено.Я получил некоторую помощь от одного из основных участников ControlsFX.

Документация была немного неясной.Чтобы получить описанное поведение, можно создать пользовательский редактор типов ячеек + на основе существующих.

Для получения более подробной информации смотрите эту ветку: https://groups.google.com/forum/#!topic/controlsfx-dev/ro7-MvLFD1A

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...