/*
 * Copyright (C) 2008-2015 by Holger Arndt
 *
 * This file is part of the Universal Java Matrix Package (UJMP).
 * See the NOTICE file distributed with this work for additional
 * information regarding copyright ownership and licensing.
 *
 * UJMP is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * UJMP is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with UJMP; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
 * Boston, MA  02110-1301  USA
 */

package org.ujmp.gui.renderer;

import java.awt.Color;
import java.awt.Component;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.border.Border;
import javax.swing.table.DefaultTableCellRenderer;

import org.ujmp.core.Matrix;
import org.ujmp.core.util.ColorUtil;
import org.ujmp.core.util.StringUtil;
import org.ujmp.core.util.UJMPFormat;

public class MatrixValueTableCellRenderer extends DefaultTableCellRenderer {
	private static final long serialVersionUID = -1473046176750819621L;

	private static final Color SELECTCOLOR = new Color(100, 100, 255, 76);

	private static final Border borderSelected = BorderFactory.createLineBorder(Color.blue, 1);
	private static final Border borderNotSelected = BorderFactory.createLineBorder(Color.white, 1);

	private final MatrixHeatmapRenderer matrixRenderer = new MatrixHeatmapRenderer();

	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
			int row, int column) {
		JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
		label.setHorizontalAlignment(JLabel.CENTER);

		Color c = ColorUtil.fromObject(value);

		int width = table.getColumnModel().getColumn(column).getWidth();
		if (width < 25) {
			label.setText("");
		} else {
			String s;
			if (value == null) {
				s = "";
			} else if (value instanceof Matrix) {
				s = "";
				Matrix ma = (Matrix) value;
				if (ma.getLabel() != null) {
					s += "[" + ma.getLabel() + "]";
				} else {
					s += ma.getClass().getSimpleName();
				}
				return matrixRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
			} else if (value instanceof Integer) {
				s = String.valueOf(value);
			} else if (value instanceof Byte) {
				s = String.valueOf(value);
			} else if (value instanceof Long) {
				s = String.valueOf(value);
			} else {
				s = UJMPFormat.getSingleLineInstance().format(value);
			}
			if (s != null && s.length() > 100) {
				s = s.substring(0, 100) + "...";
			}
			label.setText(s);
		}
		label.setForeground(ColorUtil.contrastBW(c));
		if (isSelected) {
			label.setBorder(borderSelected);
			label.setBackground(ColorUtil.add(c, SELECTCOLOR));
		} else {
			label.setBorder(borderNotSelected);
			label.setBackground(c);
		}

		return label;
	}

	protected void setValue(Object value) {
		setText((value == null) ? "" : StringUtil.format(value));
	}

}

 

Ads help maintain this website.