javafx TableView左对齐单列

时间:2015-09-06 12:31:29

标签: java tableview javafx-8

我有一张漂浮的桌面视图,工作正常。我已经制作了这样的单元格,因为单元格是可编辑的,格式化为货币等。所有单元格都是右对齐的,就像人们期望的那样是数字字段。

其中一列引用了一个字符串(而不是一个浮点数),它也是可编辑的 - 也可以使用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());

这就是它的样子: enter image description here

正如你可以看到煤炭&#34;煤炭&#34;在它没有左对齐。 我知道它是微不足道的,但仍然令人沮丧。

2 个答案:

答案 0 :(得分:2)

我建议您尝试以下操作:cargoTableTypeCol.setStyle("-fx-alignment: CENTER-LEFT;");

答案 1 :(得分:1)

在@ UrgurcanYildirim的答案(或使用外部样式表)中使用CSS是这个特定用例的最佳解决方案。

问题中的代码不起作用的原因是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 ;
});