下面列出了javafx.scene.control.TableColumn#setSortable ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public void addColumn(final String columnName, final int percentWidth) {
final TableColumn<C, Object> column = new TableColumn<>(columnName);
tableColumns.put(columnName, column);
column.prefWidthProperty().bind(table.widthProperty().multiply(percentWidth / 100.0));
column.setCellValueFactory(cellData -> new SimpleObjectProperty<>(translator.getCellData(cellData.getValue(), columnName)));
column.setCellFactory(columnData -> {
return new TableCell<C, Object>() {
@Override
public void updateItem(final Object item, final boolean empty) {
super.updateItem(item, empty);
if (item != null) {
this.setText(translator.getCellText(this.getTableRow().getItem(), item, columnName));
final ConstellationColor color = translator.getCellColor(this.getTableRow().getItem(), item, columnName);
this.setBackground(new Background(new BackgroundFill(color.getJavaFXColor(), CornerRadii.EMPTY, Insets.EMPTY)));
}
}
};
});
column.setSortable(true);
table.getColumns().add(column);
}
/** @param index Column index, -1 to add to end
* @param header Header text
*/
private void createTableColumn(final int index, final String header)
{
final TableColumn<List<ObservableCellValue>, CellValue> table_column = new TableColumn<>(header);
table_column.setCellValueFactory(VALUE_FACTORY);
// Prevent column re-ordering
// (handled via moveColumn which also re-orders the data)
table_column.setReorderable(false);
// By default, use text field editor. setColumnOptions() can replace
table_column.setCellFactory(list -> new StringTextCell());
table_column.setOnEditStart(event -> editing = true);
table_column.setOnEditCommit(event ->
{
editing = false;
final int col = event.getTablePosition().getColumn();
List<ObservableCellValue> row = event.getRowValue();
if (row == MAGIC_LAST_ROW)
{
// Entered in last row? Create new row
row = createEmptyRow();
final List<List<ObservableCellValue>> data = table.getItems();
data.add(data.size()-1, row);
}
row.get(col).setValue(event.getNewValue());
fireDataChanged();
// Automatically edit the next row, same column
editCell(event.getTablePosition().getRow() + 1, table_column);
});
table_column.setOnEditCancel(event -> editing = false);
table_column.setSortable(false);
if (index >= 0)
table.getColumns().add(index, table_column);
else
table.getColumns().add(table_column);
}
private TableColumn<GridLine, GridCell> buildColumn(final FilterGridModel filterModel, final int index) {
TableColumn<GridLine, GridCell> column = new TableColumn<>(columnNameTool.columnName(index));
column.setSortable(false);
column.setCellValueFactory(features -> extractValue(features, index));
column.setCellFactory(c -> new FilterGridWordTableCell(filterModel.getColumnSelections().get(index)));
if (isScrollableColumnList(filterModel)) {
column.setPrefWidth(PREFERRED_COLUMN_WIDTH);
}
return column;
}
@Override
public TableColumn<SelectionTableRowData, PdfDescriptorLoadingStatus> getTableColumn() {
TableColumn<SelectionTableRowData, PdfDescriptorLoadingStatus> tableColumn = new TableColumn<>(getColumnTitle());
tableColumn.setCellFactory(cellFactory());
tableColumn.setCellValueFactory(cellValueFactory());
tableColumn.setComparator(null);
tableColumn.setSortable(false);
tableColumn.setMaxWidth(26);
tableColumn.setMinWidth(26);
return tableColumn;
}
public SQLColumnSettingsComponent() {
columnsTable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
value = new SQLColumnSettings();
TableColumn<SQLRowObject,String> columnName=new TableColumn<SQLRowObject,String> (value.getColumnName(0));
TableColumn<SQLRowObject,SQLExportDataType> columnType=new TableColumn<SQLRowObject,SQLExportDataType> (value.getColumnName(1));
TableColumn<SQLRowObject,String> columnValue= new TableColumn<SQLRowObject,String> (value.getColumnName(2));
columnName.setCellValueFactory(new PropertyValueFactory<>("Name")); //this is needed during connection to a database
columnType.setCellValueFactory(new PropertyValueFactory<>("Type"));
columnValue.setCellValueFactory(new PropertyValueFactory<>("Value"));
columnsTable.getColumns().addAll(columnName,columnType,columnValue); //added all the columns in the table
setValue(value);
columnsTable.setStyle("-fx-selection-bar: #3399FF; -fx-selection-bar-non-focused: #E3E3E3;"); //CSS color change on selection of row
columnsTable.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
columnName.setSortable(false);
columnValue.setSortable(false);
columnType.setSortable(false);
columnName.setReorderable(false);
columnValue.setReorderable(false);
columnType.setReorderable(false);
columnsTable.setPrefSize(550, 220);
columnsTable.setFixedCellSize(columnsTable.getFixedCellSize()+20);
columnsTable.setStyle("-fx-font: 10 \"Plain\"");
//Setting action event on cells
columnsTable.getSelectionModel().setCellSelectionEnabled(true); //individual cell selection enabled
columnsTable.setEditable(true);
//Editors on each cell
columnName.setCellFactory(TextFieldTableCell.<SQLRowObject>forTableColumn());
columnName.setOnEditCommit(event -> {
getValue().setValueAt(event.getNewValue(), event.getTablePosition().getRow(), 0);
setValue(getValue()); //refresh the table
});
columnValue.setCellFactory(TextFieldTableCell.<SQLRowObject>forTableColumn());
columnValue.setOnEditCommit(event -> {
getValue().setValueAt(event.getNewValue().toUpperCase(), event.getTablePosition().getRow(), 2);
setValue(getValue()); //refresh the table
});
ArrayList<SQLExportDataType> exportDataTypeValues=new ArrayList<SQLExportDataType>(Arrays.asList(SQLExportDataType.values()));
columnType.setCellFactory(ComboBoxTableCell.forTableColumn(FXCollections.observableArrayList(SQLExportDataType.values())));
columnType.setOnEditCommit(event -> {
boolean selected = event.getNewValue().isSelectableValue();
if(!selected){ //case of invalid(Title) datatype selection
getValue().setValueAt(exportDataTypeValues.get(exportDataTypeValues.indexOf(event.getNewValue())+1),event.getTablePosition().getRow(),1);
}
else {
getValue().setValueAt(event.getNewValue(), event.getTablePosition().getRow(), 1);
}
setValue(getValue());
});
// Add buttons
VBox buttonsPanel=new VBox(20);
addColumnButton=new Button("Add");
removeColumnButton=new Button("Remove");
addColumnButton.setOnAction(this::actionPerformed);
removeColumnButton.setOnAction(this::actionPerformed);
buttonsPanel.getChildren().addAll(addColumnButton,removeColumnButton);
this.setRight(buttonsPanel);
this.setCenter(columnsTable);
BorderPane.setMargin(buttonsPanel, new Insets(10));
}