UPDATE:Java TableModel wird nicht aktualisiert?
fand ich diese Antwort von @MadProgrammer und es funktionierte!
Updating JTable on button click
Grundsätzlich Sie eine Aktualisierung() -Methode, um Ihre Tablemodel hinzufügen, die in der aktualisierten Objekt nimmt. Dann wird bei jedem Drücken der Taste diese Methode des Tabellenmodells aufgerufen.
Ich nehme an, dass Sie auch JTable erweitern können und diese Methode in die erweiterte Klasse einfügen. Es könnte effizientere Lösungen geben, aber ich werde für diesen Schritt bleiben. Vielen Dank!
/********************************************* *******************************/
Ich mache Tabellen in Java, um Werte von Objekten aus der Klasse anzuzeigen " Esstisch". Ich habe eine benutzerdefinierte DinnerTableModel-Klasse erstellt, die AbstractTableModel erweitert und TableModel implementiert. Jedoch scheint es, dass wenn ich meine ursprünglichen "DinnerTable" -Objekte modifiziere, die entsprechenden Objekte im tableModel überhaupt nicht geändert werden. Die Lösung für dieses Problem, das ich gegoogelt habe, war, einen TableModelListener zu erstellen. Allerdings habe ich auch eine andere JTable, die diesen Listener nicht enthält, aber es funktioniert einwandfrei. Die Hauptunterschiede zwischen diesen Tabellen besteht darin, dass der JButton, der bewirkt, dass sich der Wert dieser Objekte ändert, derselbe Tab ist wie die Arbeitstabelle, aber auf einer anderen Registerkarte als die nicht funktionierende DinnerTable in JTabbedPane. Was ist eine effiziente Möglichkeit, diese DinnerTableModels zu aktualisieren? (Ich werde 38 von ihnen brauchen). Vielen Dank!
package DinnerList;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class DinnerTableModel extends AbstractTableModel implements TableModel{
private final String[] columnNames;
private DinnerTable dt;
public DinnerTableModel(DinnerTable popopo)
{
dt=popopo;
columnNames= new String[1];
columnNames[0]=popopo.getTableNumber()+". "+popopo.getTeacherName();
}
public String getColumnName(int col)
{
return columnNames[0];
}
public Object getValueAt(int rowIndex, int colIndex)
{
if(rowIndex<7)
{
System.out.println(dt.getMembers().size());
if(dt.getMembers().size()>rowIndex)
{
System.out.println("haha");
return dt.getMembers().get(rowIndex);
}
else
{
return null;
}
}
else
{
System.out.println("Error: attempting to getValue at row>=7 in DTM");
return null;
}
}
public Class getColumnClass(int c)
{
return Student.class;
}
public boolean isCellEditable(int row, int col)
{
return true;
}
public void setValueAt(Object b,int row, int col)
{
if(b instanceof Student)
{
dt.getMembers().set(row, (Student)b);
}
else
{
System.out.println("Error: Attemping to put nonstudent into student in DTM");
}
fireTableCellUpdated(row, col);
}
}
///////////////////////////////////
package DinnerList;
import java.util.ArrayList;
import java.util.List;
public class DinnerTable
{
private List<Student> members= new ArrayList<Student>(7);
private int tableNumber=0;
private int capacity=0;
private String teacherName="";
private boolean available=true;
public DinnerTable(int a, int b, String c, boolean d)
{
tableNumber=a;
capacity=b;
teacherName=c;
available=d;
}
public void add(Student s)
{
if(available&&(members.size()<capacity))
{ this.members.add(s); }
else if(!available)
{ System.out.println("Adding Student failed, table "+tableNumber+" not available");}
else
{ System.out.println("Adding Student failed, table "+tableNumber+" is full");}
}
public List<Student> getMembers(){return members;}
public void remove(Student s)
{
if(members.contains(s))
{
members.remove(s);
}
else
{
System.out.println("Failed to remove student from table because it wasn't there");
}
}
}
//////////
Sie veröffentlichen keinen gültigen [mcve] Code, der für uns kompiliert und ausgeführt wird. Wenn Sie anständige Hilfe wünschen, verbessern Sie bitte diese Frage, indem Sie diese erstellen und posten. Ja, das verlangt zusätzliche Arbeit von Ihnen, aber Sie verlangen zusätzliche Arbeit von uns, kostenlos, also ist das eine faire Bitte, sollte ich denken. –