Hallo zusammen,
ich habe sehr lange gegoogelt auch viele Probleme wie meins gefunden, aber keine der Lösungen war für mich passend.
Ich habe ein großen JFrame, der zwei JPanels enthält (Jeweils in einer eigenen Klasse).
Im linken Panel befindet sich ein JTree. Bei Klick auf ein Element im Tree soll sich die JTable aus dem rechten Panel aktualisieren. Ich habe folgenden Code:
Das ist der Code meines Table-Panels. Wenn ich die "update()" Methode aus dieser Klasse heraus aufrufe, dann wird die Tabelle wie gewünscht erneuert. Wenn ich aber aus der TreePanel-Klasse die Methode mit
Code:
aufrufe, dann wird die Tabelle nicht aktualisiert. Der Code in der update-Methode wird zwar durchlaufen, aber die Tabelle ändert sich nicht.
Hier noch mein TableModel:
Hat jemand eine Ahnung wo mein Fehler liegt?
Vielen Dank im Vorraus
Gruß
M3doXX
ich habe sehr lange gegoogelt auch viele Probleme wie meins gefunden, aber keine der Lösungen war für mich passend.
Ich habe ein großen JFrame, der zwei JPanels enthält (Jeweils in einer eigenen Klasse).
Im linken Panel befindet sich ein JTree. Bei Klick auf ein Element im Tree soll sich die JTable aus dem rechten Panel aktualisieren. Ich habe folgenden Code:
Code:
public class TableMainPanel extends JPanel{
private JTable table;
private static TableMainPanel instance = null;
public static TableMainPanel getInstance()
{
if(instance == null)
instance = new TableMainPanel();
return instance;
}
public TableMainPanel()
{
instance = this;
setLayout(new BorderLayout());
setLayout(new FlowLayout());
setBorder(new EmptyBorder(5, 5, 5, 5));
table = new JTable();
setBorder(null);
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 1;
c.insets = new Insets(0, 0, 0, 0);
add(new JScrollPane(table), c);
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
updateTable(Access.getPersonsByTeamId(3));
}
});
table.getTableHeader().setReorderingAllowed(false);
table.setRowSelectionAllowed(true);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
updateTable(new ArrayList<Person>());
setVisible(true);
}
public void updateTable(ArrayList<Person> tableList)
{
TableModelPersons model = new TableModelPersons(tableList);
table.setModel(model);
model.fireTableRowsUpdated(0, model.getRowCount());
}
}
Das ist der Code meines Table-Panels. Wenn ich die "update()" Methode aus dieser Klasse heraus aufrufe, dann wird die Tabelle wie gewünscht erneuert. Wenn ich aber aus der TreePanel-Klasse die Methode mit
Code:
Code:
TableMainPanel.getInstance().updateTable("-gefüllte Arraylist-");
aufrufe, dann wird die Tabelle nicht aktualisiert. Der Code in der update-Methode wird zwar durchlaufen, aber die Tabelle ändert sich nicht.
Hier noch mein TableModel:
Code:
public class TableModelPersons extends AbstractTableModel {
private static final Object[] header = {"Name", "Vorname", "Straße + Nr","PLZ", "Ort"};
private Object rowData[][];
public TableModelPersons(ArrayList<Person> data)
{
rowData = new Object[data.size()][];
for (int i = 0; i < data.size(); i++)
{
Person person = data.get(i);
Long id = person.getId();
String name = person.getName();
String surname = person.getSurname();
Address address = new Address();
try {
address = Access.getAddressById(person.getAddress_id());
} catch (AddressNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String street_number = address.getStreetNumber();
String zip = address.getZip();
String city = address.getCity();
rowData[i] = new Object[] { surname, name, street_number, zip, city, id};
}
fireTableDataChanged();
}
public int getRowCount() {
return rowData.length;
}
public int getColumnCount() {
return header.length;
}
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col);
}
public Object getValueAt(int row, int col) {
return rowData[row][col];
}
public Long getPersonId(int row) {
return (Long) rowData[row][5];
}
@Override
public String getColumnName(int column) {
return header[column].toString();
}
@Override
public Class<?> getColumnClass(int column) {
switch (column) {
case 0:
return String.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return String.class;
case 5:
return Long.class;
default:
return String.class;
}
}
}
Hat jemand eine Ahnung wo mein Fehler liegt?
Vielen Dank im Vorraus
Gruß
M3doXX