javafx TableView 左对齐单列
javafx TableView left justify single column
我有一个工作正常的浮动表视图。我已经做到了,所以单元格是可编辑的,格式化为货币等。所有单元格都是右对齐的,就像人们期望的数字字段一样。
其中一列引用字符串(而不是浮点数),它也是可编辑的——也可以使用 TextFieldTableCell.forTableColumn()
方法。
但是我不知道如何左对齐字符串——它像其他列一样右对齐。我尝试使用 .setAlignment(Pos.CENTER_LEFT)
方法,但 它仅在编辑单元格时左对齐 。编辑后再次右对齐...
这是该特定列的片段:
cargoTableTypeCol.setCellFactory((TableColumn<CargoItem, String> p) -> {
TableCell<CargoItem, String> cell = new TableCell<>();
cell.setAlignment(Pos.CENTER_LEFT);
return cell;
});
cargoTableTypeCol.setCellFactory(TextFieldTableCell.forTableColumn());
cargoTableTypeCol.setCellValueFactory(cellData -> cellData.getValue().typeProperty());
它是这样的:
如您所见,带有 "coal" 的单元格不是左对齐的。
我知道这是微不足道的,但仍然令人沮丧。
我建议您尝试以下方法:cargoTableTypeCol.setStyle("-fx-alignment: CENTER-LEFT;");
使用 CSS,如@UgurcanYildirim 的回答(或使用外部样式 sheet),是针对此特定用例的最佳解决方案。
问题中的代码不起作用的原因是 cellFactory
是 属性 并且遵循属性的通常规则。特别是,如果您用一个值调用 setCellFactory(...)
并随后用另一个值调用它,则第二个值会替换第一个值,而第一个值将被丢弃。换句话说,一个 TableColumn
有一个且只有一个 cellFactory
.
对于您确实需要修改一个细胞工厂返回的细胞的用例,您可以使用以下(本质上只是一个装饰器模式):
Callback<TableColumn<CargoItem, String>, TableCell<CargoItem, String>> defaultCellFactory
= TextFieldTableCell.forTableColumn();
cargoTableTypeCol.setCellFactory(col -> {
TableCell<CargoItem, String> cell = defaultCellFactory.call(col);
cell.setAlignment(Pos.CENTER_LEFT);
return cell ;
});
我有一个工作正常的浮动表视图。我已经做到了,所以单元格是可编辑的,格式化为货币等。所有单元格都是右对齐的,就像人们期望的数字字段一样。
其中一列引用字符串(而不是浮点数),它也是可编辑的——也可以使用 TextFieldTableCell.forTableColumn()
方法。
但是我不知道如何左对齐字符串——它像其他列一样右对齐。我尝试使用 .setAlignment(Pos.CENTER_LEFT)
方法,但 它仅在编辑单元格时左对齐 。编辑后再次右对齐...
这是该特定列的片段:
cargoTableTypeCol.setCellFactory((TableColumn<CargoItem, String> p) -> {
TableCell<CargoItem, String> cell = new TableCell<>();
cell.setAlignment(Pos.CENTER_LEFT);
return cell;
});
cargoTableTypeCol.setCellFactory(TextFieldTableCell.forTableColumn());
cargoTableTypeCol.setCellValueFactory(cellData -> cellData.getValue().typeProperty());
它是这样的:
如您所见,带有 "coal" 的单元格不是左对齐的。 我知道这是微不足道的,但仍然令人沮丧。
我建议您尝试以下方法:cargoTableTypeCol.setStyle("-fx-alignment: CENTER-LEFT;");
使用 CSS,如@UgurcanYildirim 的回答(或使用外部样式 sheet),是针对此特定用例的最佳解决方案。
问题中的代码不起作用的原因是 cellFactory
是 属性 并且遵循属性的通常规则。特别是,如果您用一个值调用 setCellFactory(...)
并随后用另一个值调用它,则第二个值会替换第一个值,而第一个值将被丢弃。换句话说,一个 TableColumn
有一个且只有一个 cellFactory
.
对于您确实需要修改一个细胞工厂返回的细胞的用例,您可以使用以下(本质上只是一个装饰器模式):
Callback<TableColumn<CargoItem, String>, TableCell<CargoItem, String>> defaultCellFactory
= TextFieldTableCell.forTableColumn();
cargoTableTypeCol.setCellFactory(col -> {
TableCell<CargoItem, String> cell = defaultCellFactory.call(col);
cell.setAlignment(Pos.CENTER_LEFT);
return cell ;
});