正如您在图片中看到的那样,每个列的文本对齐方式设置为左对齐 . 有没有办法改变这个?到目前为止,我已经在我的CSS文件中尝试过:
#Cols{ text-align: right; }
我也尝试过:
#Cols{ -fx-text-alignment: right; }
有谁知道如何改变对齐方式?
从JavaFX-8开始,您可以使用新定义的CSS选择器 table-column ,
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 ,
TableColumn
firstTextCol.setStyle( "-fx-alignment: CENTER-RIGHT;");
或者用css,
firstTextCol.getStyleClass().add( "custom-align");
哪里
.custom-align { -fx-alignment: center-right; }
对于JavaFX-2,要将不同的对齐应用于不同的列,您需要为该列设置单元格工厂 . 例如,假设表中的第1列应该与左对齐,而其他列使用表的默认对齐(在您的情况下为 CENTER-RIGHT ) .
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; } });
即使这是两岁,这是另一个答案 . 对于每个表列,都存在一个默认的css样式类 .table-column ,因此如果要将整个表列更改为对齐中心,则只需将其放在样式表或内联样式中:
.table-column
.table-column { -fx-alignment: CENTER_RIGHT; }
如果你有一个应该以其他方式对齐的列,比如一个行 Headers ,完全没问题,可以将一个id附加到此列,如rowHeading,并在样式表或内联样式中写入:
#rowHeading { -fx-alignment: CENTER_LEFT; }
它应该保持居中 . 无需大量编码 .
我用了
cell.setAlignment(Pos.CENTER_RIGHT);
代替
cell.setStyle("-fx-alignment: CENTER-LEFT;");
但是如果有这样的CSS,我不能把fx:id放在一个列上然后把它的对齐放在一个CSS文件中?这只是设置列对齐的大量代码 .
快速解决方法是在SceneBuilder中选择列,然后将属性添加到样式字段
我试过这个并且它有效
@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); } }
5 回答
所有表列的对齐方式:
从JavaFX-8开始,您可以使用新定义的CSS选择器
table-column
,对于JavaFX-2,要实现此目的,请定义一个CSS选择器:
并设置 tableview 的id .
单表列对齐:
从JavaFX-8开始,您可以直接将样式应用于
TableColumn
,或者用css,
哪里
对于JavaFX-2,
要将不同的对齐应用于不同的列,您需要为该列设置单元格工厂 . 例如,假设表中的第1列应该与左对齐,而其他列使用表的默认对齐(在您的情况下为
CENTER-RIGHT
) .即使这是两岁,这是另一个答案 . 对于每个表列,都存在一个默认的css样式类
.table-column
,因此如果要将整个表列更改为对齐中心,则只需将其放在样式表或内联样式中:如果你有一个应该以其他方式对齐的列,比如一个行 Headers ,完全没问题,可以将一个id附加到此列,如rowHeading,并在样式表或内联样式中写入:
它应该保持居中 . 无需大量编码 .
我用了
代替
但是如果有这样的CSS,我不能把fx:id放在一个列上然后把它的对齐放在一个CSS文件中?这只是设置列对齐的大量代码 .
快速解决方法是在SceneBuilder中选择列,然后将属性添加到样式字段
我试过这个并且它有效