JavaFXTableView文本对齐

JavaFXTableView文本对齐,java,css,tableview,javafx,Java,Css,Tableview,Javafx,如图所示,每个列的文本对齐设置为左对齐。有没有办法改变这一点?到目前为止,我已在CSS文件中尝试: #Cols{ text-align: right; } 我也尝试过: #Cols{ -fx-text-alignment: right; } 有人知道如何将对齐方式更改为右侧吗?所有表列的对齐方式: 从JavaFX-8开始,您可以使用新定义的CSS选择器表列 #my-table .table-column { -fx-alignment: CENTER-RIGHT; }

如图所示,每个列的文本对齐设置为左对齐。有没有办法改变这一点?到目前为止,我已在CSS文件中尝试:

#Cols{
    text-align: right;
}
我也尝试过:

#Cols{
    -fx-text-alignment: right;
}
有人知道如何将对齐方式更改为右侧吗?

所有表列的对齐方式: 从JavaFX-8开始,您可以使用新定义的CSS选择器
表列

#my-table .table-column {
  -fx-alignment: CENTER-RIGHT;
}
firstTextCol.setStyle( "-fx-alignment: CENTER-RIGHT;");
对于JavaFX-2, 要实现此目的,请定义CSS选择器:

#my-table .table-cell {
    -fx-alignment: CENTER-RIGHT;
     /* The rest is from caspian.css */

    -fx-skin: "com.sun.javafx.scene.control.skin.TableCellSkin";
    -fx-padding: 0.166667em; /* 2px, plus border adds 1px */

    -fx-background-color: transparent;
    -fx-border-color: transparent -fx-table-cell-border-color transparent transparent;
    -fx-border-width: 0.083333em; /* 1 */
    -fx-cell-size: 2.0em; /* 24 */
    -fx-text-fill: -fx-text-inner-color;
}
并设置表视图的id

tableView.setId("my-table");

单表列的对齐方式: 从JavaFX-8开始,您可以直接将样式应用于
TableColumn

#my-table .table-column {
  -fx-alignment: CENTER-RIGHT;
}
firstTextCol.setStyle( "-fx-alignment: CENTER-RIGHT;");
或者使用css

firstTextCol.getStyleClass().add( "custom-align");
在哪里

对于JavaFX-2,
要对不同的列应用不同的对齐方式,需要为该列设置单元工厂。例如,假设表中的第一列应该向左对齐,而其他列使用表的默认对齐方式(在您的情况下为
中-右

firstTextCol.setCellFactory(新回调(){
公共TableCell调用(TableP列){
TableCell单元格=新的TableCell(){
@凌驾
public void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
setText(空?null:getString());
设置图形(空);
}
私有字符串getString(){
返回getItem()==null?”:getItem().toString();
}
};
cell.setStyle(“-fx对齐:左中;”);
返回单元;
}
});
我用过

cell.setAlignment(Pos.CENTER_RIGHT);
而不是

cell.setStyle("-fx-alignment: CENTER-LEFT;");

但是如果有CSS的话,我能把fx:id放在一个列上,然后把它的对齐方式放在CSS文件中吗?上面有很多代码只是用来设置列对齐方式。

我试过了,效果很好

@FXML private TableColumn<BookingData,String>colClientMobile;

//Some code
colClientMobile.setCellFactory(new Callback<TableColumn<BookingData, String>, TableCell<BookingData, String>>() {
        @Override
        public TableCell<BookingData, String> call(TableColumn<BookingData, String> param) {
            return new TableCellFormat();
        }
    });

private class TableCellFormat extends TableCell<BookingData, String>{
    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty); 
        this.setText(item);
        this.setAlignment(Pos.CENTER_RIGHT);
    }
}
@FXML private tableColumnClientMobile;
//一些代码
colClientMobile.setCellFactory(新回调(){
@凌驾
公共TableCell调用(TableColumn参数){
返回新的TableCellFormat();
}
});
私有类TableCellFormat扩展了TableCell{
@凌驾
受保护的void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
本文件为setText(项目);
此.设置对齐(位置居中\右侧);
}
}

即使这已经两年了,这里还有另一个答案。对于每个表列,都存在一个默认的css样式类
。表列
,因此,如果要更改整个表列以右中对齐,只需将其放入样式表或内联样式中:

.table-column {
  -fx-alignment: CENTER_RIGHT;
}
#rowHeading {
  -fx-alignment: CENTER_LEFT;
}
如果有一个列应该以另一种方式对齐,如行标题,则完全没有问题,将id附加到该列(如行标题),然后使用样式表或内联样式写入:

.table-column {
  -fx-alignment: CENTER_RIGHT;
}
#rowHeading {
  -fx-alignment: CENTER_LEFT;
}

它应该在左中心。无需大量编码。

一个快速修复方法是在SceneBuilder中选择列,然后将属性添加到样式字段中

再简单不过了

对于单个列(或任何选择)

在fxml中声明样式类

<TableColumn  styleClass="centered-table-column" />
或用于所有列

.table列{
-fx对齐:中心;
}

它是一个ID还是一个类?您也可以尝试
text align:right!重要的
@HamZaDzCyberDeV应该是我使用的id:col.setId(“Cols”);可悲的是,这并没有改变它:这起作用了!我该怎么做才能使图例(我的图片中的测试)不移动?我同意您应该能够为列设置css id或类,然后使用适当的css选择器选择单元格进行样式设置-但它不起作用(我认为这是一个bug)。我为此创建了一个问题跟踪条目:如果我尝试将此代码与可编辑列一起使用,它将不起作用。要么是编辑作品,要么是改编。您能否提供一个代码示例,使文本与pos.CENTER_RIGHT对齐的可编辑列取决于,您可能需要使用
-fx alignment:CENTER_RIGHT!重要的以使其能够收听。