Also ich hab jetzt meine demo so umgestaltet, das sie dein TableModel verwendet und hab nach wie vor keinerlei probleme (Ich bekomme die ausgabe "TEST", wenn ich einen wert in spalte 3 aendere.)
Code:
/**File: JTableExample.java*/
/**@Author: Benjamin Ferrari , 2006*/
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
class User{
public User(String fn, String ln, String gvgid){
setFn(fn);
setLn(ln);
setGvgid(gvgid);
}
private String fn;
private String ln;
private String gvgid;
public final String getFn() {
return fn;
}
public final void setFn(String fn) {
this.fn = fn;
}
public final String getGvgid() {
return gvgid;
}
public final void setGvgid(String gvgid) {
this.gvgid = gvgid;
}
public final String getLn() {
return ln;
}
public final void setLn(String ln) {
this.ln = ln;
}
}
class CMSTableModel extends AbstractTableModel{
//eclipse wants me to do this, ignore
private static final long serialVersionUID = 1L;
/** Creates a new instance of CMSTableModel */
private Vector<User> user_vec = null;
public CMSTableModel(Vector<User> u)
{
this.user_vec = u;
}
public Object getValueAt(int row,int column)
{
User u = user_vec.get(row);
switch(column)
{ case 0: return u.getFn();
case 1: return u.getLn();
case 2: return u.getGvgid();
}
return null;
}
public int getRowCount()
{
return user_vec.size();
}
public int getColumnCount()
{
return 3;
}
public String getColumnName(int column)
{
switch(column)
{ case 0: return new String("Vorname");
case 1: return new String("Nachname");
case 2: return new String("GvGID");
}
return null;
}
public boolean isCellEditable(int rowIndex,int columnIndex)
{
if(columnIndex == 2) {
return true;
}
else {
return false;
}
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
User u=this.user_vec.get(rowIndex);
switch(columnIndex)
{
case 0: u.setFn((String) aValue);
case 1: u.setLn((String) aValue);
case 2: u.setGvgid((String) aValue);
}
fireTableCellUpdated(rowIndex, columnIndex);
}
}
public class JTableExample extends JPanel {
private static final long serialVersionUID = 1L;
public JTableExample() {
JTable table = createTable();
// Hier der Code, in dem auf das aendern eines values reagiert wird.
// Beachte auch, das du es die methoden event.getFirstRow() und
// event.GetLastRow() gibt. Du kannst also auch die aenderungen von
// mehreren zeilen gleichzeitig abfangen.
table.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent event) {
System.out.println("TEST");
}
});
this.add(table);
}
private JTable createTable() {
Vector<User> users = new Vector<User>();
users.add(new User("fn1", "ln1", "gvgid1"));
users.add(new User("fn2", "ln2", "gvgid2"));
users.add(new User("fn3", "ln3", "gvgid3"));
JTable table = new JTable();
table.setModel(new CMSTableModel(users));
return table;
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.add(new JTableExample());
frame.pack();
frame.setVisible(true);
}
}
UPDATE: Wenn diese Demo genau so bei Dir nicht funktioniert, poste doch bitte mal die Ausgabe von "java -version" hier. Bei mir ist das
Code:
$ java -version
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-112)
Java HotSpot(TM) Client VM (build 1.5.0_06-64, mixed mode, sharing)
(auf Mac OSX)
Bookmarks