javafx TableView左对齐单列

javafx TableView左对齐单列,java,tableview,javafx-8,Java,Tableview,Javafx 8,我有一张工作正常的花车的桌面图。我这样做的目的是使单元格可以编辑,格式为货币等。所有单元格都正确对齐,正如人们所期望的数字字段一样 其中一列引用的是字符串而不是浮点值,浮点值也是可编辑的,使用TextFieldTableCell.forTableColumn方法也可以。 但是,我不知道如何左对齐字符串-它与其他列一样右对齐。我尝试使用.setAlignmentPos.CENTER_LEFT方法,但它仅在编辑单元格时左对齐。编辑后,它再次右对齐 以下是该专栏的片段: cargoTableType

我有一张工作正常的花车的桌面图。我这样做的目的是使单元格可以编辑,格式为货币等。所有单元格都正确对齐,正如人们所期望的数字字段一样

其中一列引用的是字符串而不是浮点值,浮点值也是可编辑的,使用TextFieldTableCell.forTableColumn方法也可以。 但是,我不知道如何左对齐字符串-它与其他列一样右对齐。我尝试使用.setAlignmentPos.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());
下面是它的样子:

正如你所看到的,装有煤的电池没有左对齐。
我知道这很琐碎,但仍然令人沮丧。

我建议您尝试以下方法:cargoTableTypeCol.setStyle-fx-alignment:CENTER-LEFT

使用CSS,如@UgurcanYildirim的答案或使用外部样式表,是这个特定用例的最佳解决方案

问题中的代码不起作用的原因是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.forTable列与用于格式化编辑值的setAlignment方法集成?添加了一个答案。在这个特定的用例中,我建议使用CSS,就像@UgurcanYildirim的回答一样。