Legal Terms and Copyright Notice
/* * Copyright (c) 2012, 2014 Oracle and/or its affiliates. * All rights reserved. Use is subject to license terms. * * This file is available and licensed under the following license: * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the distribution. * - Neither the name of Oracle nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
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; } }