@Beni
könntest du das JTable (Tutorial)© – Byte-Welt Wiki etwas überarbeiten?
Vehicel statt Vehicle liest sich dort ja ganz ärgerlich
nach
http://forum.byte-welt.net/java-forum/spiele-und-multimedia-programmierung/18324-wav-sound-abspielen.html#post129082
habe ich für das Model eine Variante ohne eigene Verwaltung von Listener und komplizierte Events gebastelt,
nur fireTableDataChanged(); überall, nicht ganz schön, aber weitaus kürzer, als Ersatz mit Warnung oder als zweite Variante vielleicht akzeptabel?
private String[] columnNames = new String[] {"Name", "Fahrgäste", "Räder", "Besitzt Motor"};
private Class[] columnClasses = new Class[] {String.class, Integer.class, Integer.class, Boolean.class};
private List<Vehicle> vehicles = new ArrayList<>();
public void addVehicle(Vehicle vehicle) {
this.vehicles.add(vehicle);
fireTableDataChanged();
}
public void sort() {
Collections.sort(this.vehicles);
fireTableDataChanged();
}
@Override
public int getColumnCount() {
return this.columnNames.length;
}
@Override
public int getRowCount() {
return this.vehicles.size();
}
@Override
public String getColumnName(int column) {
return this.columnNames[column];
}
@Override
public Class getColumnClass(int column) {
return this.columnClasses[column];
}
@Override
public Object getValueAt(int row, int column) {
Vehicle v = this.vehicles.get(row);
switch (column) {
case 0:
return v.getName();
case 1:
return Integer.valueOf(v.getPlaces());
case 2:
return Integer.valueOf(v.getWheels());
case 3:
return v.hasMotor() ? Boolean.TRUE : Boolean.FALSE;
default:
return null;
}
}
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
@Override
public void setValueAt(Object aValue, int row, int column) {
// nicht beachten
}
}
in der GUI passt dazu noch für neue Sortieren-Funktionalität,
falls diese Sortieren-Variante nicht stört, immerhin auch eigene Unterseite am Ende
final JButton buttonSort = new JButton("sort");
buttonSort.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
model.sort();
}
});
JPanel buttons = new JPanel();
buttons.add(buttonAdd);
buttons.add(buttonSort);
....
content.add(buttons, BorderLayout.SOUTH);