package asandatabasebrowser.view;

import java.awt.Color;
import java.awt.Component;
import javax.swing.*;
import javax.swing.table.*;

import java.math.BigDecimal;


/**
 * カラムの値を表示するクラス.
 * ２つのテーブルで使われる。
 */
public class DbColumnValueRenderer extends DefaultTableCellRenderer {
	public DbColumnValueRenderer() {
	}

	public Component getTableCellRendererComponent(JTable table,
				Object value, boolean isSelected, boolean hasFocus, int row, int column) {
		// フォーカスのある場所の情報を表示する。
//		if(hasFocus) System.out.println("getTableCellRendererComponent("+value+":"+
//						((value!=null)?(value.getClass().toString()):("null"))+","+
//						row+","+column+")");
		// superのsetBackground(Color)を確実に設定させるために、直前の値を忘れる。
		super.setBackground(null);
		// 基本的にはデフォルトの描画を行う。
		Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
		JLabel label = (JLabel) c;
		// NULL以外のとき、
		if (value == DbRecordView.NO_RECORD) {
			label.setBackground(Color.lightGray);
			label.setText("");
		} else if (value!=null) {
			label.setForeground(Color.black);
			// 数値の時には右寄せで表示
			if (value instanceof Integer ||
				value instanceof Long ||
				value instanceof BigDecimal) {
				label.setHorizontalAlignment(JLabel.RIGHT);
			}
			// それ以外は左寄せで表示
			else {
				label.setHorizontalAlignment(JLabel.LEFT);
			}
		}
		// NULLのときにはグレイで中央に表示。
		else {
			label.setForeground(Color.gray);
			label.setText("NULL");
			label.setHorizontalAlignment(JLabel.CENTER);
		}
//		label.setOpaque(true);
		return c;
	}
}


