文档



JavaFX:FXML大师
E FormattedTableCellFactory 代码(发布版 8)

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;
    }
} 
关闭窗口

目录

JavaFX: FXML 精通

展开 折叠