首页 文章

JavaFX TableView文本对齐方式

提问于
浏览
35

enter image description here

正如您在图片中看到的那样,每个列的文本对齐方式设置为左对齐 . 有没有办法改变这个?到目前为止,我已经在我的CSS文件中尝试过:

#Cols{
    text-align: right;
}

我也尝试过:

#Cols{
    -fx-text-alignment: right;
}

有谁知道如何改变对齐方式?

5 回答

  • 3

    所有表列的对齐方式:

    从JavaFX-8开始,您可以使用新定义的CSS选择器 table-column

    #my-table .table-column {
      -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;
    }
    

    并设置 tableview 的id .

    tableView.setId("my-table");
    

    单表列对齐:

    从JavaFX-8开始,您可以直接将样式应用于 TableColumn

    firstTextCol.setStyle( "-fx-alignment: CENTER-RIGHT;");
    

    或者用css,

    firstTextCol.getStyleClass().add( "custom-align");
    

    哪里

    .custom-align { 
      -fx-alignment: center-right; 
    }
    

    对于JavaFX-2,
    要将不同的对齐应用于不同的列,您需要为该列设置单元格工厂 . 例如,假设表中的第1列应该与左对齐,而其他列使用表的默认对齐(在您的情况下为 CENTER-RIGHT ) .

    firstTextCol.setCellFactory(new Callback<TableColumn, TableCell>() {
                public TableCell call(TableColumn p) {
                    TableCell cell = new TableCell<Person, String>() {
                        @Override
                        public void updateItem(String item, boolean empty) {
                            super.updateItem(item, empty);
                            setText(empty ? null : getString());
                            setGraphic(null);
                        }
    
                        private String getString() {
                            return getItem() == null ? "" : getItem().toString();
                        }
                    };
    
                    cell.setStyle("-fx-alignment: CENTER-LEFT;");
                    return cell;
                }
            });
    
  • 4

    即使这是两岁,这是另一个答案 . 对于每个表列,都存在一个默认的css样式类 .table-column ,因此如果要将整个表列更改为对齐中心,则只需将其放在样式表或内联样式中:

    .table-column {
      -fx-alignment: CENTER_RIGHT;
    }
    

    如果你有一个应该以其他方式对齐的列,比如一个行 Headers ,完全没问题,可以将一个id附加到此列,如rowHeading,并在样式表或内联样式中写入:

    #rowHeading {
      -fx-alignment: CENTER_LEFT;
    }
    

    它应该保持居中 . 无需大量编码 .

  • 1

    我用了

    cell.setAlignment(Pos.CENTER_RIGHT);
    

    代替

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

    但是如果有这样的CSS,我不能把fx:id放在一个列上然后把它的对齐放在一个CSS文件中?这只是设置列对齐的大量代码 .

  • 3

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

    enter image description here

  • 65

    我试过这个并且它有效

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

相关问题