/** * */ package org.korsakow.ide.ui.components.code; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.table.TableModel; import org.korsakow.ide.code.k5.K5Code; import org.korsakow.ide.util.UIUtil; public class CodeTable extends JTable { public static String TIME_IDENTIFIER = "time"; public static String CODE_IDENTIFIER = "code"; public static String MAXLINKS_IDENTIFIER = "maxlinks"; public CodeTable() { super(new CodeTableModel()); putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); // thank you jrdasm, via http://www.codeguru.com/forum/archive/index.php/t-301102.html setAutoCreateColumnsFromModel(false); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); UIUtil.addColumn(this, "Time", TIME_IDENTIFIER); UIUtil.addColumn(this, "", CODE_IDENTIFIER); UIUtil.addColumn(this, "MaxLinks", MAXLINKS_IDENTIFIER); getColumn(TIME_IDENTIFIER).setCellEditor(new TimeCellEditor()); getColumn(TIME_IDENTIFIER).setCellRenderer(new TimeCellRenderer()); getColumn(TIME_IDENTIFIER).setMaxWidth(70); getColumn(CODE_IDENTIFIER).setCellRenderer(new CodeCellRenderer()); getColumn(CODE_IDENTIFIER).setCellEditor(new CodeCellEditor()); getColumn(MAXLINKS_IDENTIFIER).setCellEditor(new MaxLinksCellEditor()); getColumn(MAXLINKS_IDENTIFIER).setCellRenderer(new MaxLinksCellRenderer()); getColumn(MAXLINKS_IDENTIFIER).setMaxWidth(60); setRowHeight(20); addMouseListener(new ComponentCellEditorSimpleClickAdapter(0)); getModel().addTableModelListener(new CodeTableController(this)); } /** * We set this to false in the ctor but the super ctor calls this!!!! */ @Override public boolean getAutoCreateColumnsFromModel() { return false; } @Override public void setModel(TableModel dataModel) { setModel(((CodeTableModel)(dataModel))); } public void setModel(CodeTableModel dataModel) { dataModel.setColumnName(CodeTableModel.TIME_COLUMN, TIME_IDENTIFIER); dataModel.setColumnName(CodeTableModel.CODE_COLUMN, CODE_IDENTIFIER); dataModel.setColumnName(CodeTableModel.MAXLINKS_COLUMN, MAXLINKS_IDENTIFIER); super.setModel(dataModel); getModel().addTableModelListener(new CodeTableController(CodeTable.this)); } @Override public CodeTableModel getModel() { return (CodeTableModel)super.getModel(); } public String getRawCodeAt(int row) { return ((K5Code)getValueAt(row, 1)).getRawCode(); } @Override public boolean isCellEditable(int row, int col) { return true; } public int getColumnIndex(Object identifier) { return getColumnModel().getColumnIndex(identifier); } }