【发布时间】:2017-01-27 09:37:01
【问题描述】:
我有一个包含许多列的 TableView,因此我的表格可以水平滚动。如果我让单元格内容左对齐,它看起来像预期的那样:
将其更改为右对齐后,最后一列的末尾部分会被垂直滚动滑块覆盖。所以并不是所有的内容都是可见的:
知道怎么解决吗?
TableView 类:
class DataTableView {
private TableView <DataTableModel> dataTable = new TableView<>();
DataTableView(DataObject dataObject)
{
dataTable.setId("dataTable");
dataTable.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);
populateTable(dataObject);
}
private void populateTable(DataObject dataObject)
{
dataTable.getItems().clear();
dataTable.getColumns().clear();
dataTable.setPlaceholder(new Label("Loading..."));
Task<Void> task = new Task<Void>()
{
@Override
protected Void call() throws Exception
{
List <String>headerTexts = new ArrayList<>();
dataObject.getColumnsDataTable().forEach(name ->
headerTexts.add(name.getName()+'\n'+name.getUnit()));
Platform.runLater(new Runnable()
{
@Override
public void run()
{
dataTable.getColumns().add(createIndexColumn());
for (int columnIndex = 0; columnIndex < headerTexts.size(); columnIndex++)
{
dataTable.getColumns().add(
createColumn(columnIndex, headerTexts.get(columnIndex)));
}
}
});
Platform.runLater(new Runnable()
{
@Override
public void run()
{
for(DataTableModel data : prepareDataModel(dataObject))
{
dataTable.getItems().add(data);
}
}
});
return null;
}
};
Thread thread = new Thread(task);
thread.setDaemon(true);
thread.start();
}
private TableColumn <DataTableModel,String> createIndexColumn ()
{
TableColumn<DataTableModel,String> column = new TableColumn< >("No");
column.setSortable(false);
column.setCellFactory(col ->
{
TableCell<DataTableModel, String> cell = new TableCell<>();
cell.textProperty().bind(Bindings.when(cell.emptyProperty())
.then("")
.otherwise(cell.indexProperty().add(1).asString()));
return cell ;
});
return column;
}
private TableColumn <DataTableModel, String> createColumn(final int columnIndex, String columnTitle )
{
TableColumn<DataTableModel, String> column = new TableColumn<>(columnTitle);
column.setCellValueFactory(cellData -> cellData.getValue().getRow().get(columnIndex));
column.setSortable(false);
return column;
}
private ObservableList <DataTableModel> prepareDataModel(DataObject dataObject)
{
ObservableList <DataTableModel> dataTableModel = FXCollections.observableArrayList();
dataObject.getDataTableData().forEach(row -> dataTableModel.add(new DataTableModel(row)));
return dataTableModel;
}
public TableView getDataTableView (){
return dataTable;
}
}
第二张截图的 CSS:
#dataTable .table-cell {
-fx-alignment: center-right;
-fx-padding: 0 0 0 0;
}
表模型:
public class DataTableModel {
private ObservableList<StringProperty> row = FXCollections.observableArrayList();
public DataTableModel(List <String> data)
{
data.forEach(element -> row.add(new SimpleStringProperty(element)));
}
public void setRow(ObservableList<StringProperty> row) {
this.row = row;
}
public ObservableList<StringProperty> getRow() {
return row;
}
public int size() {
return row.size();
}
}
【问题讨论】:
-
如果可能的话 setPrefWidth for TableView 它可以提供帮助。如果为列设置任何宽度,最好的方法是设置列宽度之和。
-
什么是结果?有用吗?
-
不幸的是,TableView 的 setPrefWidth 不起作用。单元格内容的末尾部分仍然隐藏在滚动滑块下。
-
如果可以附上您的代码,它将更有可能提供帮助。
-
我已将代码添加到原始帖子中。谢谢。
标签: java javafx scroll tableview