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 ;
});