GenderRenderer.java Source code

Java tutorial

Introduction

Here is the source code for GenderRenderer.java

Source

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

class GenderRenderer extends JComboBox implements TableCellRenderer {

    public GenderRenderer() {
        super();
        addItem("Male");
        addItem("Female");
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
            int row, int column) {

        if (isSelected) {
            setForeground(table.getSelectionForeground());
            super.setBackground(table.getSelectionBackground());
        } else {
            setForeground(table.getForeground());
            setBackground(table.getBackground());
        }

        boolean isMale = ((Boolean) value).booleanValue();
        setSelectedIndex(isMale ? 0 : 1);
        return this;
    }
}

public class TableCellRendererJComboBox extends JFrame {
    protected JTable table;

    public static void main(String[] args) {
        TableCellRendererJComboBox stt = new TableCellRendererJComboBox();
        stt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        stt.setSize(400, 200);
        stt.setVisible(true);
    }

    public TableCellRendererJComboBox() {
        Container pane = getContentPane();
        pane.setLayout(new BorderLayout());
        TableValues tv = new TableValues();
        table = new JTable(tv);
        TableColumnModel tcm = table.getColumnModel();
        TableColumn tc = tcm.getColumn(TableValues.GENDER);
        tc.setCellRenderer(new GenderRenderer());
        JScrollPane jsp = new JScrollPane(table);
        pane.add(jsp, BorderLayout.CENTER);
    }

}

class TableValues extends AbstractTableModel {

    public final static int FIRST_NAME = 0;

    public final static int LAST_NAME = 1;

    public final static int DATE_OF_BIRTH = 2;

    public final static int ACCOUNT_BALANCE = 3;

    public final static int GENDER = 4;

    public final static boolean GENDER_MALE = true;

    public final static boolean GENDER_FEMALE = false;

    public Object[][] values = {
            { "C", "A", new GregorianCalendar(1962, Calendar.FEBRUARY, 20).getTime(), new Float(1.67),
                    new Boolean(GENDER_MALE) },
            { "J", "A", new GregorianCalendar(1987, Calendar.JANUARY, 6).getTime(), new Float(2.78),
                    new Boolean(GENDER_MALE) },
            { "J", "A", new GregorianCalendar(1989, Calendar.AUGUST, 31).getTime(), new Float(3.89),
                    new Boolean(GENDER_FEMALE) },
            { "E", "K", new GregorianCalendar(1945, Calendar.JANUARY, 16).getTime(), new Float(-4.70),
                    new Boolean(GENDER_FEMALE) },
            { "B", "S", new GregorianCalendar(1907, Calendar.AUGUST, 2).getTime(), new Float(5.00),
                    new Boolean(GENDER_FEMALE) } };

    public int getRowCount() {
        return values.length;
    }

    public int getColumnCount() {
        return values[0].length;
    }

    public Object getValueAt(int row, int column) {
        return values[row][column];
    }

}