Gute Tag zusammen,
ich habe zum Anzeigen von Buchungen folgendes TableModel geschrieben. Das "Problem" ist, dass ich zwei Arten von Buchungen habe, die beide in dieser einen Tabelle angezeigt werden sollen. Das ist zum einen Verkäufe(Sale) auf die diese Tabelle auch optimiert ist und zum anderen Abrechnungen(Settlement). Diese werden mit dem Produkt-Namen "Abrechnung" angezeigt, haben natürlich die Menge 1 und eben den dazugehörigen Preis. Ich habe das unterscheiden dieser beiden Typen(definiert über Klassen) momentan so gelöst, dass ich versuche das eine zu casten, die ClassCastException abfange, falls es nicht der erste Typ ist und dann halt den zweiten Typ annehme. Mir kommt diese Methode nicht sehr geschickt und schön vor. Als alternative könnte man natürlich mit getClass vergleichen, was aber nach meinem wissen auch kein so guter Stil ist. Wäre nett, wenn jemand eine "schönere" Mathode kennt, diese bzw. den Ansatz zu posten. Vielen Dank! Hier wie versprochen der Quellcode des Models(Sale und Settlement erben beide von UserBook) und die Klasse die die Daten in der Tabelle beinhaltet:
Edit: Falsches TableModel drin gehabt^^
ich habe zum Anzeigen von Buchungen folgendes TableModel geschrieben. Das "Problem" ist, dass ich zwei Arten von Buchungen habe, die beide in dieser einen Tabelle angezeigt werden sollen. Das ist zum einen Verkäufe(Sale) auf die diese Tabelle auch optimiert ist und zum anderen Abrechnungen(Settlement). Diese werden mit dem Produkt-Namen "Abrechnung" angezeigt, haben natürlich die Menge 1 und eben den dazugehörigen Preis. Ich habe das unterscheiden dieser beiden Typen(definiert über Klassen) momentan so gelöst, dass ich versuche das eine zu casten, die ClassCastException abfange, falls es nicht der erste Typ ist und dann halt den zweiten Typ annehme. Mir kommt diese Methode nicht sehr geschickt und schön vor. Als alternative könnte man natürlich mit getClass vergleichen, was aber nach meinem wissen auch kein so guter Stil ist. Wäre nett, wenn jemand eine "schönere" Mathode kennt, diese bzw. den Ansatz zu posten. Vielen Dank! Hier wie versprochen der Quellcode des Models(Sale und Settlement erben beide von UserBook) und die Klasse die die Daten in der Tabelle beinhaltet:
Java:
public class UserBookTableModel extends AbstractTableModel {
private ArrayList<BookTableData> data;
public UserBookTableModel(ArrayList<UserBook> data) {
for (UserBook userBook : data) {
addUserBook(userBook);
}
}
public UserBookTableModel() {
data = new ArrayList<BookTableData>();
}
public void addUserBook(UserBook userBook) {
try {
Sale sale = (Sale) userBook;
data.add(new BookTableData(sale.getProduct().getName(), sale.getAmount(), (double) (sale.getDatePrice() * 100)));
} catch (Exception e) {
Settlement settlement = (Settlement) userBook;
data.add(new BookTableData("Abrechnung", 1, (double) (settlement.getMoney() * 100)));
}
}
public void removeUserBook(BookTableData data) {
this.data.remove(data);
}
public void clearTable() {
data.clear();
}
public int getRowCount() {
return data.size();
}
public int getColumnCount() {
return 4;
}
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return data.get(rowIndex).getName();
case 1:
return data.get(rowIndex).getPrice();
case 2:
return data.get(rowIndex).getAmount();
case 3:
return data.get(rowIndex).getPrice() * data.get(rowIndex).getAmount();
default:
return null;
}
}
@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return "Produkt";
case 1:
return "Preis";
case 2:
return "Menge";
case 3:
return "Gesamtpreis";
default:
return null;
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
Java:
public class BookTableData {
private String name;
private int amount;
private double price;
public BookTableData(String name, int amount, double price) {
this.name = name;
this.amount = amount;
this.price = price;
}
public String getName() {
return name;
}
public int getAmount() {
return amount;
}
public double getPrice() {
return price;
}
}
Edit: Falsches TableModel drin gehabt^^
Zuletzt bearbeitet: