мы используем электронную таблицу с различными типами ячеек.
В документации к 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