E 格式化表格单元工厂代码
本附录列出了FormattedTableCellFactory.java
示例代码。
FormattedTableCellFactory.java
文件实现了设置表格单元中数据对齐方式的逻辑。
FormattedTableCellFactory.java
/* * 版权所有 (c) 2012, 2014 Oracle及其附属公司。 * 保留所有权利。使用受许可条款约束。 * * 此文件可在以下许可下使用和许可: * * 源代码的重新发布和使用,无论是否进行修改,只要满足以下条件: * * - 必须保留上述版权声明、此条件列表和以下免责声明。 * - 以二进制形式重新发布的代码必须复制上述版权声明、此条件列表和以下免责声明到文档和/或其他提供的材料中。 * - 未经特定事先书面许可,不得使用Oracle或其贡献者的名称来认可或推广从本软件派生的产品。 * * 本软件由版权持有人和贡献者“按原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性和适用性的暗示保证。 * 在任何情况下,版权持有人或贡献者均不对任何直接、间接、偶然、特殊、惩罚性或后果性损害(包括但不限于替代商品或服务的采购、使用、数据或利润损失,或业务中断)承担责任,无论是合同责任、严格责任还是侵权行为(包括疏忽或其他)。 */ package fxmltableview; import java.text.Format; import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.text.TextAlignment; import javafx.util.Callback; public class FormattedTableCellFactory<S, T> implements Callback<TableColumn<S, T>, TableCell<S, T>> { private TextAlignment alignment; private Format format; public TextAlignment getAlignment() { return alignment; } public void setAlignment(TextAlignment alignment) { this.alignment = alignment; } public Format getFormat() { return format; } public void setFormat(Format format) { this.format = format; } @Override @SuppressWarnings("unchecked") public TableCell<S, T> call(TableColumn<S, T> p) { TableCell<S, T> cell = new TableCell<S, T>() { @Override public void updateItem(Object item, boolean empty) { if (item == getItem()) { return; } super.updateItem((T) item, empty); if (item == null) { super.setText(null); super.setGraphic(null); } else if (format != null) { super.setText(format.format(item)); } else if (item instanceof Node) { super.setText(null); super.setGraphic((Node) item); } else { super.setText(item.toString()); super.setGraphic(null); } } }; cell.setTextAlignment(alignment); switch (alignment) { case CENTER: cell.setAlignment(Pos.CENTER); break; case RIGHT: cell.setAlignment(Pos.CENTER_RIGHT); break; default: cell.setAlignment(Pos.CENTER_LEFT); break; } return cell; } }