Hallo,
ich habe schon gefühlte 1000 JTables angelegt und bisher hatte ich nie dieses Problem. Ich habe ein eigenes Model. Zu dieser Table gehört ein Filterpanel wo man Einstellungen vornehmen kann. z.B. Gibt es ein Searchfield in das man einen Text eintragen kann nachdem gesucht werden soll. Wird nun in diesem Feld etwas eingegeben, dann rufe ich im Model die Funktion filterChanged() auf. Diese erstellt eine neue Liste und ruft dann FireTableDataChanged() auf. Normalerweise wird dann das JTable mir der neuen Liste gezeichnet. Das passiert hier aber nicht. Erst wenn ich in das Panel des JTable klicke wird dieses Panel refreshed.
Hier mal der Code der die JTable erstellt:
Hier ein Ausschnitt aus dem Model:
Wenn ich die toggleSortOrder Zeile einkommentiere wird übrigens auch nichts dargestellt. Dann ist die Table immer leer. Das hatte ich früher auch noch nicht.
Hat irgendjemand eine Idee woran das liegen könnte. Auch die absurdesten Vorschläge nehme ich gerne an.
Gruß
Claus
ich habe schon gefühlte 1000 JTables angelegt und bisher hatte ich nie dieses Problem. Ich habe ein eigenes Model. Zu dieser Table gehört ein Filterpanel wo man Einstellungen vornehmen kann. z.B. Gibt es ein Searchfield in das man einen Text eintragen kann nachdem gesucht werden soll. Wird nun in diesem Feld etwas eingegeben, dann rufe ich im Model die Funktion filterChanged() auf. Diese erstellt eine neue Liste und ruft dann FireTableDataChanged() auf. Normalerweise wird dann das JTable mir der neuen Liste gezeichnet. Das passiert hier aber nicht. Erst wenn ich in das Panel des JTable klicke wird dieses Panel refreshed.
Hier mal der Code der die JTable erstellt:
Code:
jobsTable = new JTable(model);
jobsTable.setFillsViewportHeight(true);
TableRowSorter<UnassignedJobsModel> rowSorter = new TableRowSorter<UnassignedJobsModel>(model);
jobsTable.setRowSorter(rowSorter);
// jobsTable.getRowSorter().toggleSortOrder(5);
jobsTable.setFont(UserSettings.plainTextFont);
jobsTable.getSelectionModel().addListSelectionListener(new UnassignedJobsListSelectionListener(this));
jobsTable.setColumnSelectionAllowed(false);
jobsTable.setSelectionMode(0);
jobsTable.setSelectionBackground(PMController.blueBackgroundColor);
jobsTable.addMouseListener(new tableMouseAdapter(this,0));
jobsTable.setDefaultRenderer(String.class, new MultiLineTableCellRenderer());
jobsTable.setIntercellSpacing(new Dimension(0, 0));
jobsTable.getTableHeader().setReorderingAllowed(false);
setUserSettings(jobsTable);
JPanel scrollPanel = new JPanel();
scrollPanel.setLayout(new BoxLayout(scrollPanel, BoxLayout.LINE_AXIS));
addHorizontalSpace(scrollPanel, 10);
JScrollPane scrollPane=new JScrollPane(jobsTable,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.getViewport().setBackground(PMController.grayBackgroundColor);
scrollPanel.add(scrollPane);
addHorizontalSpace(scrollPanel, 10);
scrollPanel.setBackground(Color.white);
scrollPanel.setOpaque(true);
listPanel.add(scrollPanel);
Hier ein Ausschnitt aus dem Model:
Code:
public class UnassignedJobsModel extends AbstractTableModel implements UnassignedJobsLoaderListener, DevicesFilterListener
{
....
public void filterChanged()
{
filterList=new ArrayList<PMJob>();
for(PMJob entry : list)
{
if(!entry.contains(filter.searchFilter()))
continue;
filterList.add(entry);
}
fireTableDataChanged();
}
...
}
Wenn ich die toggleSortOrder Zeile einkommentiere wird übrigens auch nichts dargestellt. Dann ist die Table immer leer. Das hatte ich früher auch noch nicht.
Hat irgendjemand eine Idee woran das liegen könnte. Auch die absurdesten Vorschläge nehme ich gerne an.
Gruß
Claus