Hallo,
habe hier ein kleines Beispiel aufgebaut, ist zwar nicht ganz sinnvoll, aber sollte erstmal vom Prinzip her stimmen. Ich bekomme die jtable nicht aktualisiert. Habe vier Klassen: Controller, Model, User, View. Der Model wird benachrichtigt, sobald sich der User geändert hat, in dem Fall sein Name. Rufe dann in der update Funktion der Klasse Model die Funktion fireTableDataChanged() auf. Allerdings wird die Table nicht aktualisiert.
habe hier ein kleines Beispiel aufgebaut, ist zwar nicht ganz sinnvoll, aber sollte erstmal vom Prinzip her stimmen. Ich bekomme die jtable nicht aktualisiert. Habe vier Klassen: Controller, Model, User, View. Der Model wird benachrichtigt, sobald sich der User geändert hat, in dem Fall sein Name. Rufe dann in der update Funktion der Klasse Model die Funktion fireTableDataChanged() auf. Allerdings wird die Table nicht aktualisiert.
Java:
import javax.swing.JFrame;
public class Controller extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
public Controller() {
setContentPane(new View());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
new Controller();
}
import java.util.Observable;
import java.util.Observer;
import javax.swing.table.DefaultTableModel;
public class Model extends DefaultTableModel implements Observer {
/**
*
*/
private static final long serialVersionUID = 1L;
private User u;
public Model() {
String[] vColumnNames = { "Name" };
setColumnIdentifiers(vColumnNames);
u = new User("TestUser");
u.addObserver(this);
addRow(new String[] { u.getName() });
}
// TODO Auto-generated constructor stub
@Override
public void update(Observable arg0, Object arg1) {
fireTableDataChanged();
// TODO Auto-generated method stub
}
public User getUser() {
return u;
}
import java.util.Observable;
public class User extends Observable{
private String name;
public User(String name) {
this.name = name;
// TODO Auto-generated constructor stub
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void update(){
setChanged();
notifyObservers();
}
}
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class View extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private JTable table;
public View() {
table = new JTable(new Model());
JScrollPane p = new JScrollPane(table);
add(p, BorderLayout.CENTER);
JButton b = new JButton(ACTION_RENAME);
b.setText("Rename");
add(b, BorderLayout.NORTH);
// TODO Auto-generated constructor stub
}
private Action ACTION_RENAME = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
((Model) table.getModel()).getUser().setName("Neuer");
((Model) table.getModel()).getUser().update();
// TODO Auto-generated method stub
}
};
}
}
}