// ReminderTable package org.javamoney.examples.ez.money.gui.table; import static org.javamoney.examples.ez.common.utility.I18NHelper.getSharedProperty; import static org.javamoney.examples.ez.money.utility.RenderHelper.setLookFor; import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Date; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.table.TableCellRenderer; import org.javamoney.examples.ez.money.IconKeys; import org.javamoney.examples.ez.money.gui.GUIConstants; import org.javamoney.examples.ez.money.gui.table.comparator.ReminderComparator; import org.javamoney.examples.ez.money.gui.table.model.ReminderModel; import org.javamoney.examples.ez.money.model.persisted.reminder.Reminder; import org.javamoney.examples.ez.money.utility.TransactionDateHelper; import org.javamoney.examples.ez.common.gui.table.SortedDataTable; import org.javamoney.examples.ez.common.utility.I18NHelper; /** * This class facilitates displaying reminders in a table. */ public final class ReminderTable extends SortedDataTable<Reminder> { /** * Constructs a new table. */ public ReminderTable() { super(COLUMNS, new ReminderModel(), new ReminderComparator()); // Customize table. setGridColor(GUIConstants.COLOR_TABLE_GRID); setPreferredWidths(new int[] {145, 80, 25}); setRowHeight(GUIConstants.CELL_HEIGHT); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); setSortableColumns(new int[] {DUE_BY_COLUMN, ID_COLUMN}); // Add listeners. addMouseListener(new MouseHandler()); } /** * This method adds all its reminders into the table. */ @Override public void display() { clearRows(); sort(); for(Reminder reminder : getList()) { ((ReminderModel)getModel()).addRow(reminder); } } /** * This method returns the object responsible for rendering the cell at the * specified row and column. * * @param row The cell's row. * @param column The cell's column. * * @return The object responsible for rendering the cell at the specified row * and column. */ @Override public TableCellRenderer getCellRenderer(int row, int column) { return RENDER_HANDLER; } ////////////////////////////////////////////////////////////////////////////// // Start of private methods. ////////////////////////////////////////////////////////////////////////////// private static String getProperty(String key) { return I18NHelper.getProperty("ReminderTable." + key); } ////////////////////////////////////////////////////////////////////////////// // Start of inner classes. ////////////////////////////////////////////////////////////////////////////// private class CellRenderHandler extends JLabel implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Reminder reminder = get(row); // Customize look. setLookFor(this, row, isSelected); setText(value.toString()); // Icon and tool tip. if(column == STATUS_COLUMN) { setToolTipText(TIP); if(reminder.isComplete() == true) { setIcon(IconKeys.TABLE_RECONCILED.getIcon()); } else if(reminder.isOverdue() == true) { setIcon(IconKeys.WARNING.getIcon()); } else { setIcon(null); } } else { setIcon(null); setToolTipText(null); } // Alignment if(column == ID_COLUMN) { setHorizontalAlignment(SwingConstants.LEFT); } else { setHorizontalAlignment(SwingConstants.CENTER); } return this; } } private class MouseHandler extends MouseAdapter { @Override public void mouseClicked(MouseEvent event) { if(event.getButton() == MouseEvent.BUTTON1 && event.getClickCount() == 2) { Reminder reminder = getSelectedElement(); if(reminder != null) { if(getColumnIndexAtX(event.getX()) == DUE_BY_COLUMN) { Date date = TransactionDateHelper.showDateDialog(reminder.getDueBy()); if(date != null) { reminder.setDueBy(date); display(); } } else if(getColumnIndexAtX(event.getX()) == STATUS_COLUMN) { reminder.setIsComplete(!reminder.isComplete()); repaint(); } } } } } ////////////////////////////////////////////////////////////////////////////// // Start of class members. ////////////////////////////////////////////////////////////////////////////// private final CellRenderHandler RENDER_HANDLER = new CellRenderHandler(); private static final String[] COLUMNS = { getProperty("obligation"), getSharedProperty("due_by"), getProperty("status") }; private static final String TIP = getProperty("tip"); /** * The column for the reminder's due by date. */ public static final int DUE_BY_COLUMN = 1; /** * The column for the reminder's identifier. */ public static final int ID_COLUMN = 0; /** * The column for the reminder's status. */ public static final int STATUS_COLUMN = 2; }