package event.editor; import javax.swing.*; import java.util.*; import javax.swing.table.*; class MyTableModel extends AbstractTableModel { private JTable table; protected static String[] columnNames = {"Role", "Dialog"}; private Vector> rowData = new Vector>(); public String getColumnName(int col) { return columnNames[col].toString(); } public int getRowCount() { return rowData.size(); } public int getColumnCount() { return columnNames.length; } public Object getValueAt(int row, int col) { return rowData.get(row).get(col); } public boolean isCellEditable(int row, int col) { return col != 0; } public void setValueAt(Object value, int row, int col) { rowData.get(row).set(col, (String) value); fireTableCellUpdated(row, col); } public void setTable(JTable theTable) { table = theTable; } public void addRow(String role, String dialog) { Vector theRow = new Vector(); theRow.add(role); theRow.add(dialog); rowData.add(theRow); this.fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1 ); } public void deleteRow(int row) { if (row >= 0) { rowData.remove(row); this.fireTableRowsDeleted(row, row); } } } /** * * @author nathaniellehrer */ public class GenericTable { public static JTable genericizeTable(JScrollPane scrollPane, final HashMap types, JButton removeButton) { final JTable dialogTable = new JTable(new MyTableModel()); ((MyTableModel) dialogTable.getModel()).setTable(dialogTable); dialogTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); dialogTable.getColumnModel().getColumn(0).setPreferredWidth(80); dialogTable.getColumnModel().getColumn(1).setPreferredWidth(733); scrollPane.setViewportView(dialogTable); for (final JButton button : types.keySet()) { button.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent evt) { ((MyTableModel) dialogTable.getModel()).addRow(types.get(button), ""); } }); } removeButton.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent evt) { ((MyTableModel) dialogTable.getModel()).deleteRow(dialogTable.getSelectedRow()); } }); return dialogTable; } public static void genericizeTable(JScrollPane scrollPane, final JComboBox types, JButton addButton, JButton removeButton) { final JTable dialogTable = genericizeTable(scrollPane, new HashMap(), removeButton); addButton.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent evt) { ((MyTableModel) dialogTable.getModel()).addRow((String) types.getSelectedItem(), "");; } }); } public static void genericizeTable(JScrollPane scrollPane, final JComboBox types, JButton addButton, JButton removeButton, String header1, String header2) { MyTableModel.columnNames[0] = header1; MyTableModel.columnNames[1] = header2; GenericTable.genericizeTable(scrollPane, types, addButton, removeButton); } public static void genericizeNumberedTable(JScrollPane scrollPane, JButton addButton, JButton removeButton) { MyTableModel.columnNames[0] = "#"; final JTable dialogTable = genericizeTable(scrollPane, new HashMap(), removeButton); addButton.addMouseListener(new java.awt.event.MouseAdapter() { private int counter = 1; @Override public void mouseClicked(java.awt.event.MouseEvent evt) { ((MyTableModel) dialogTable.getModel()).addRow("" + counter++, "");; } }); } }