/*
* TableListenerDemo.java
*/
package table;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class TableListenerDemo extends JFrame {
public TableListenerDemo() {
super("TableListenerDemo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,300);
setLocationRelativeTo(null);
table = new JTable();
toolbar = new JToolBar();
btTest = new JButton("Test TableModelListener");
model = new DefaultTableModel(
new Object [][] {
{"1", "a", null, new Integer(12)},
{"2", "b", new Boolean(true), new Integer(36)},
{"3", "c", new Boolean(true), new Integer(433)},
{"4", "d", null, new Integer(8)}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
) {
Class[] types = new Class [] {
String.class, String.class, Boolean.class, Integer.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
};
table.setModel(model);
getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
toolbar.add(btTest);
getContentPane().add(toolbar, BorderLayout.NORTH);
//Listeners:
model.addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
myTableChanged(e);
}
});
// HIER IST DER ListSelectionListener:
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
tableValueChanged(e);
}
});
btTest.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
btTestActionPerformed(evt);
}
});
}
//Diese Methode reagiert nur wenn sich das TableModel verändert:
private void myTableChanged(TableModelEvent e){
String type = types.get(e.getType());
int row = e.getFirstRow()+1;
JOptionPane.showMessageDialog(null, "TableModelListener is OK:\n"
+type+" row "+row);
}
//Diese Methode reagiert auf Änderungen in der Zeilenauswahl:
private void tableValueChanged(ListSelectionEvent e){
if(e.getValueIsAdjusting()) return;
int row = table.getSelectedRow()+1;
System.out.println("Selected row: "+row);
}
//Nur zum Testen des TableModelListeners:
private void btTestActionPerformed(ActionEvent evt) {
Object[] rowData = new Object[]{"5", "e", new Boolean(true), new Integer(12)};
model.addRow(rowData);
btTest.setEnabled(false);
}
public static void main(String args[]) {new TableListenerDemo().setVisible(true);}
private DefaultTableModel model;
private Map<Integer, String> types = new HashMap<Integer, String>();{
types.put(TableModelEvent.INSERT, "INSERT");
types.put(TableModelEvent.DELETE, "DELETE");
types.put(TableModelEvent.UPDATE, "UPDATE");
}
private JButton btTest;
private JTable table;
private JToolBar toolbar;
}