JTABLE setvalueat methode!

  • Themenstarter Themenstarter Lender
  • Beginndatum Beginndatum
L

Lender

Gast
Guten Tag kann sich jemand mein Tablemodel angucken und mir kurz Feedback geben ob ich meine setvalueat methode richtig gemacht habe?


Java:
public class TableModel extends AbstractTableModel {
	private List<DispoVO> dispoVO;

	public void uebergabe_liste(List<DispoVO> list) {
		this.dispoVO = list;
		for (int i = 0; i < dispoVO.size(); i++) {
			setValueAt(dispoVO, i, 1);
		}
		fireTableDataChanged();
	}

	String[] header = { "Äl", "Gr", "AnzufStk", "Filialbest", "VerkStk",
			"Lagerbest", "Fakturabest", "Folgt", "Offene Posten", "UnterwHin",
			"UnterwRück", "Merkmal", "GültigVon", "GültigBis" };

	@Override
	public String getColumnName(int column) {
		return header[column];

	}

	@Override
	public int getColumnCount() {
		return header.length;
	}

	@Override
	public int getRowCount() {
		if (dispoVO == null) {
			return 0;
		}

		else {
			return dispoVO.size();
		}
	}

	@Override
	public Object getValueAt(int row, int column) {
		DispoVO dispo = dispoVO.get(row);
		switch (column) {
		case 0:
			dispo.getAl();
			break;
		case 1:
			dispo.getGroesse();
			break;
		case 2:
			dispo.getAnzufStk();
			break;
		case 3:
			dispo.getFilBest();
			break;
		case 4:
			dispo.getVerkStk();
			break;
		case 5:
			dispo.getLagerBest();
			break;
		case 6:
			dispo.getFaktBest();
			break;
		case 7:
			dispo.getFolgt();
			break;
		case 8:
			dispo.getOffeneAnf();
			break;
		case 9:
			dispo.getUnterwHin();
			break;
		case 10:
			dispo.getUnterwRueck();
			break;
		case 11:
			dispo.getMerkmal();
			break;
		case 12:
			dispo.getGueltigVon();
			break;
		case 13:
			dispo.getGueltigBis();
			break;

		default:
			return null;
		}
		return dispo;
	}

	public void setValueAt(Object value, int row, int column) {
		for (int i = 0; i < dispoVO.size(); i++) {
			switch (column) {
			case 0:
				setValueAt(dispoVO.get(i).getAl(), i, 0);
				break;
			case 1:
				setValueAt(dispoVO.get(i).getGroesse(), i, 1);
				break;
			case 2:
				setValueAt(dispoVO.get(i).getAnzufStk(), i, 2);
				break;
			case 3:
				setValueAt(dispoVO.get(i).getFilBest(), i, 3);
				break;
			case 4:
				setValueAt(dispoVO.get(i).getVerkStk(), i, 4);
				break;
			case 5:
				setValueAt(dispoVO.get(i).getLagerBest(), i, 5);
				break;
			case 6:
				setValueAt(dispoVO.get(i).getFaktBest(), i, 6);
				break;
			case 7:
				setValueAt(dispoVO.get(i).getFolgt(), i, 7);
				break;
			case 8:
				setValueAt(dispoVO.get(i).getOffeneAnf(), i, 8);
				break;
			case 9:
				setValueAt(dispoVO.get(i).getUnterwHin(), i, 9);
				break;
			case 10:
				setValueAt(dispoVO.get(i).getUnterwRueck(), i, 10);
				break;
			case 11:
				setValueAt(dispoVO.get(i).getMerkmal(), 0, 11);
				break;
			case 12:
				if (!dispoVO.get(i).getGueltigVon().equals(null)) {
					setValueAt(dispoVO.get(i).getGueltigVon(), 0, 12);
					break;
				}
			case 13:
				if (!dispoVO.get(i).getGueltigBis().equals(null)) {
					setValueAt(dispoVO.get(i).getGueltigBis(), 0, 13);
				}
				break;

			default:
				return;
			}
		}
		fireTableCellUpdated(row, column);
	}

	public boolean isCellEditable(int r) {
		return false;
	}

}


Danke mit freundlichen Grüßen lender
 
desweiteren:
statt gefühlt 70.000x dispoVO.get(i) zu schreiben, könntest du auch einmal eine Variable d oder dispo anlesen, schon wird alles lesbarer,

und da du erneut setValueAt(); aufrufst, gibts eine Endlosschleife,
den Parameter value ignorierst du dagegen,
was ist eigentlich die Funktion dieser Methode in Worten?
 
ja im DispoVO gibt es doch 11 Einträge muss doch 1 Eintrag pro Zeile einfügen. 1 DispoVO besteht dann aus mehreren Attributen .


Deswegen muss ich jeden Eintrag extra behandeln oder nicht?!
 
> ja im DispoVO gibt es doch 11 Einträge muss doch 1 Eintrag pro Zeile einfügen

überleg doch was du da sagst und worum es überhaupt geht, was ist überhaupt der Sinn der Funktion?

ganz ruhig im Buch nachlesen:
in einer Zeile in einer Spalte einen einzelnen Wert abspeichern,
dazu passt dein Code und dein Text überhaupt nicht

also ein switch macht schon Sinn, aber mit richtigen Code
 
Java:
public void uebergabe_liste(List<DispoVO> list) {
        this.dispoVO = list;
        for (int i = 0; i < dispoVO.size(); i++) {
            setValueAt(dispoVO, i, 1);
        }
        fireTableDataChanged();
    }
nein... setValueAt ist die Methode die aufgerufen wird, wenn der user was eingibt, das braucht du nicht aufrufen...

dispoVO sind deine daten
getValueAt hohlt sich das Table einen Wert von dispoVO
und mit setValue wird einer gesetzt in dispoVO

ändert sich deine komplette liste, braucht du nur dispoVO zu setzen und fireTableDataChanged, du musst keine setValueAt aufrufen...
 
achso....

also sobald sich die komplette liste ändern einfach nur dies hier

Java:
	public void uebergabe_liste(List<DispoVO> list) {
		this.dispoVO = list;
		fireTableDataChanged();
	}

und dann weis das TableModel aha, es sind nur 11 Einträge und baut mir dies so wie ich es haben will....
or?!
 
eventuell hat jemand ein fertig Programmiertes Tablemodel beispiel das ich testen kann?!
 
ich brauch das AbstractTableModel das ist schon richtig. Brauche nur ein Beispiel um nach voll ziehen zu können.!
 
Das DefaultTableModel implementiert doch das AbstractTableModel, da kannst du dir mal anschauen wie die einzelnen Methoden implementiert wurden.
 
hab alles hinbekommen, er zeigt mir die werte an🙂... aber eine frage kann ich so auf null überprüfen?!

Java:
case 12:
	if(!dispo.getGueltigVon().equals(null)){
		return dispo.getGueltigVon();
		}
		break;
case 13:
	if(!dispo.getGueltigBis().equals(null)){
		return dispo.getGueltigBis();
		}
		break;
		}
	}
 
== null

aber gib doch auch ruhig null zurück, am Ende hast du sonst
> return dispo;
oder inzwischen was anders? das macht doch wenig Sinn
 
kann ich genaue angaben machen im moment habe ich dies so:

Java:
	public Object getValueAt(int row, int col) {
		
		if(!dispoVO.equals(null)){
			for(DispoVO dispo : dispoVO){
			switch(col){
			case 0:
				return dispo.getAl();
			case 1:
				return dispo.getGroesse();
			case 2:
				return dispo.getAnzufStk();
			case 3:
				return dispo.getFilBest();
			case 4:
				return dispo.getVerkStk();
			case 5:
				return dispo.getLagerBest();
			case 6:
				return dispo.getFaktBest();
			case 7:
				return dispo.getFolgt();
			case 8:
				return dispo.getOffeneAnf();
			case 9:
				return dispo.getUnterwHin();
			case 10:
				return dispo.getUnterwRueck();
			case 11:
				return dispo.getMerkmal();
			case 12:
				if(dispo.getGueltigVon() != null){
					return dispo.getGueltigVon();
					}
					break;
			case 13:
				if(dispo.getGueltigBis() != null){
				return dispo.getGueltigBis();
				}
				break;
			}
			}
		}
		fireTableDataChanged();
		return col;	
			}

jetzt schreibt er mir in jede ROW 19 rein aber will ja nur in einer Spalte dies haben, gehen auch Spalten/zeilen unterscheidungen?!
 
überleg doch immer was du machst, einfache Befehle aneinandergereiht erzielen die Wirkung,

in Zeile 4 durchläufst du die dispoVO-Liste
> for(DispoVO dispo : dispoVO){

danach das switch, es wird also immer was vom ersten dispo-Element zurückgeliefert, den Parameter row ignorierst du komplett

einfache Alternative: for-Schleife weglassen, den gesuchen dispo extrem simplel korrekt bestimmen:

DispoVO dispo = dispoVO.get(row);
// der row-te dispo ist der aktuell benötigte

-----

das zum Thema Zeile,
die Spalten sollten durch das switch eigentlich korrekt unterschieden werden, ist da ein Fehler?
'19' deutet natürlich darauf hin, dass als col 19 übergeben wurde und das kommt in deinem switch nicht vor, am Ende hast du
> return col;
wäre dann die Ausgabe 19, eher merkwürdiges Verhalten von einer JTable..
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben