是否可以为TableView
的一列中的每个单元格执行不同类型的对齐?
E.g。我有一个列中包含3种可能的数据类型:正数,负数和“ - ”。首先应该左对齐,第二对齐和第三 - 中心。
这是我尝试过的:
private void setPositionAndColor(TableColumn<TransferItem, String> tableColumn){
tableColumn.setCellFactory(new Callback<TableColumn<TransferItem, String>, TableCell<TransferItem, String>>() {
@Override
public TableCell<TransferItem, String> call(TableColumn<TransferItem, String> column) {
TableCell<TransferItem, String> cell = new TableCell<TransferItem, String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText("");
} else {
setText(item);
if (item.matches("-+\\d.*")) {
setTextFill(Color.RED);
setTextAlignment(TextAlignment.RIGHT);
}
else if (item.equals("-")) {
setTextFill(Color.AQUA);
setTextAlignment(TextAlignment.CENTER);
}else {
setTextFill(Color.GREEN);
setTextAlignment(TextAlignment.LEFT);
}
}
}
};
return cell;
}
});
}
我为测试添加了颜色更改并且它可以正常工作,但是对齐没有。
另一种方法:
Pos position;
private void setPositionAndColor(TableColumn<TransferItem, String> tableColumn){
tableColumn.setCellFactory(new Callback<TableColumn<TransferItem, String>, TableCell<TransferItem, String>>() {
@Override
public TableCell<TransferItem, String> call(TableColumn<TransferItem, String> column) {
TableCell<TransferItem, String> cell = new TableCell<TransferItem, String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText("");
} else {
setText(item);
if (item.matches("-+\\d.*")) {
setTextFill(Color.RED);
position = Pos.CENTER_RIGHT;
}
else if (item.equals("-")) {
setTextFill(Color.AQUA);
position = Pos.CENTER;
}else {
setTextFill(Color.GREEN);
position = Pos.CENTER_LEFT;
}
}
}
};
cell.setAlignment(position);
return cell;
}
});
}
也不起作用。 Ty求救。
答案 0 :(得分:1)
好的,我有一个有效的例子 - 似乎setAlignment()
可以解决问题:
@Override
public void start(Stage primaryStage) {
ObservableList<String> data = FXCollections.observableArrayList();
IntStream.range(0, 1000).mapToObj(Integer::toString).forEach(data::add);
TableView<String> table = new TableView<String>(data);
TableColumn<String, String> column = new TableColumn<String, String>("test");
column.setCellFactory(c -> new TableCell<String,String>(){
@Override
protected void updateItem(String item, boolean empty) {
if(empty) {
setText(null);
}
else {
setText(item);
if(getIndex() % 2 == 0) {
setAlignment(Pos.CENTER_LEFT);
}
else if(getIndex() % 3 == 0) {
setAlignment(Pos.CENTER_RIGHT);
}
else {
setAlignment(Pos.CENTER);
}
}
}
});
column.setCellValueFactory(c -> new SimpleStringProperty(c.getValue()));
table.getColumns().add(column);
Scene scene = new Scene(new BorderPane(table), 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}