JTable Zelle ändern -> andere Zellen mit ändern

Status
Nicht offen für weitere Antworten.

matzze2000

Aktives Mitglied
Hallo, mein Problem ist folgendes:

Ich habe ein TableModel bei dem ich Artikel, deren Preise und eine Anzahl habe. Jetzt habe ich die Spalte "Anzahl" veränderbar gemacht. Wenn man dort etwas einträgt soll automatisch der Preis Anzahl * Preis berechnet werden. Das Funktioniert auch im Prinzip, allerdings erst wenn man nochmal eine Zeile verändert/ Enter drückt. Ich nehme an ich muß irgendwie einen Listener oder so aufrufen nachdem die Zelle geändert wurde, so dass die ganze Zeile geupdatet wird. Aber ich weiß nicht wie, und auch nicht wo genau ich diesen Listener schreiben müsste.

Die beiden wichtigen Funktionen sehen so aus:

Code:
public Object getValueAt(int rowIndex, int columnIndex) {
		Artikel artikel = (Artikel)articels.get( rowIndex );
		//anzahlArtikel is ein Integer Vektor in dem die aktuelle Anzahl des jeweiligen Artikels gespeichert ist
int anzahl = anzahlArtikel.get(rowIndex);
	       
	      switch( columnIndex ){ 
	         case 0: return artikel.getName();
	         case 1: return new Double( artikel.getPreis() );
	         case 2: return anzahl;
	         case 3: return new Double ( anzahl * artikel.getPreis());
	         case 4: return new Double( artikel.getRabatt()*40 );
	         case 5: return new Double( anzahl * ( artikel.getPreis() - artikel.getPreis() * artikel.getRabatt() * 0.4 ) );
	         default: return null;
	      }
	}


public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		anzahlArtikel.set(rowIndex, (Integer)aValue);
	}
 

matzze2000

Aktives Mitglied
Mhh, das hilft mir aber nur bedingt weiter weil ich das nich genauso machen kann wie in dem Beispiel, denn ich hab mein eigenenes TableModel und rufe das in ner anderen Klasse auf. Das Problem is außerdem, dass ich jetz noch nen Wert hab der außerhalb der Tabelle liegt und auf den in der Tabelle zugegriffen wird. Die von ihm Abhängigen Zellen ändern ihren Wert aber erst, nachdem ich eine andere Zelle angeklickt habe. Kann ich nicht irgend eine Funktion schreiben die wenn sie aufgerufen wird die Tabelle aktualisert?
 

André Uhres

Top Contributor
Das geht mit jedem TableModel, das von AbstractTableModel abgeleitet ist,
also wohl auch mit deinem. Aktualisiert wird mit model.fireTableDataChanged();
oder model.fireTableChanged(..)
 

matzze2000

Aktives Mitglied
Seltsam, wenn ich diese Funktion aufrufe ändern sich aber trotzdem nicht alle Zeilen sondern updaten sich immernoch nur dann, wenn ich die Zeile anklicke :-\

Hier is mal die Klasse mit der ich die Tabelle erstelle:

Code:
class Produkttabelle extends AbstractTableModel{
	GUI gui;
	private Vector articels = new Vector();
	private Vector<Integer> anzahlArtikel = new Vector<Integer>();
	private Vector listeners = new Vector();
	
	Produkttabelle(GUI gui) {this.gui = gui;}
	
	public void addArtikel( Artikel artikel ){ 
	      // Das wird der Index des Artikels werden 
	      int index = articels.size(); 
	      articels.add( artikel );
	      anzahlArtikel.add(0);
	       
	      // Jetzt werden alle Listeners benachrichtigt 
	       
	      // Zuerst ein Event, "neue Row an der Stelle index" herstellen 
	      TableModelEvent e = new TableModelEvent( this, index, index, 
	            TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT ); 
	       
	      // Nun das Event verschicken 
	      for( int i = 0, n = listeners.size(); i<n; i++ ){ 
	         ((TableModelListener)listeners.get( i )).tableChanged( e ); 
	      } 
	   }
	
	
	public void addTableModelListener(TableModelListener l) { 
	      listeners.add( l );
	   } 
	public void removeTableModelListener(TableModelListener l) { 
	      listeners.remove( l ); 
	   }

	public Class getColumnClass(int columnIndex) {
		switch( columnIndex ){ 
        	case 0: return String.class;
        	case 1: return Double.class;
        	case 2: return Integer.class;
        	case 3: return Double.class;
        	case 4: return Double.class;
        	case 5: return Double.class;
        	default: return null;
		}
	}
	
	public int getColumnCount() {
		return 6;
	}
	
	public String getColumnName(int column) {
		switch(column){
			case 0: return "Komponente";
			case 1: return "VK Liste";
			case 2: return "Auswahl";
			case 3: return "Endkundenpreis";
			case 4: return "Händlerrabatt (%)";
			case 5: return "Händlerpreis";
			default: return null;
		}
	}
	
	public int getRowCount() {
		return articels.size();
	}
	
	public Object getValueAt(int rowIndex, int columnIndex) {
		Artikel artikel = (Artikel)articels.get( rowIndex );
		int anzahl = anzahlArtikel.get(rowIndex);
	       
	      switch( columnIndex ){ 
	         case 0: return artikel.getName();
	         case 1: return new Double( artikel.getPreis() );
	         case 2: return anzahl;
	         case 3: return new Double ( anzahl * artikel.getPreis());
	         case 4: return new Double( artikel.getRabatt()* gui.rabattProzent );
	         case 5: return new Double( anzahl * ( artikel.getPreis() - artikel.getPreis() * artikel.getRabatt() * (gui.rabattProzent / 100) ) );
	         default: return null;
	      }
	}
	
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		if(columnIndex == 2) return true;
		else return false;
	}
	
	
	//Die Funktion wird ja aufgerufen nachdem ein neuer Wert eingetragen wurde und soll auch gleich die ganze Tabelle updaten
	
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		anzahlArtikel.set(rowIndex, (Integer)aValue);
		gesamtBetraege();
		gui.model.fireTableDataChanged();
	}
	
	public void gesamtBetraege(){
		//Erst den Kunden ausrechnen
		double betragKunde = 0, betragHaendler = 0;
		for(int i=0; i< articels.size(); i++){
			betragKunde += (Double)getValueAt(i, 3);
		}
		gui.gesamtKunde.setText("Endkundenpreis: " + betragKunde + "€");
		//Jetzt den Händler
		for(int i=0; i< articels.size(); i++){
			betragHaendler += (Double)getValueAt(i, 5);
		}
		gui.gesamtHaendler.setText("Händlerpreis: " + betragHaendler + "€");
		//Jetzt den Gewinn
		gui.gesamtGewinn.setText("Händlergewinn: " + (betragKunde - betragHaendler) + "€");
	}

	public void tableChanged(TableModelEvent e) {
		System.out.println(e.getSource());
		
	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E JTable Hintergrund von geklickter Zelle ändern AWT, Swing, JavaFX & SWT 2
J Zelle eine JTable ändern AWT, Swing, JavaFX & SWT 3
lenniii Zelle in JTable ändern AWT, Swing, JavaFX & SWT 2
T einzelne Zelle einer JTable auswählen und Hintergrundfarbe ändern AWT, Swing, JavaFX & SWT 2
S Welches Event beim ändern einer Zelle in einer JTable AWT, Swing, JavaFX & SWT 4
S jTable Font einer Zelle ändern AWT, Swing, JavaFX & SWT 5
S Farbe einer Zelle in JTable ändern AWT, Swing, JavaFX & SWT 13
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
LexeB4F Zelle in JTable gezielt einfärben AWT, Swing, JavaFX & SWT 4
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
M JTable: Prüfen ob Zelle leer ist AWT, Swing, JavaFX & SWT 5
O Swing JTable - Zelle fokussieren AWT, Swing, JavaFX & SWT 10
L JTable selektierte Zelle in Bearbeitungs Modus AWT, Swing, JavaFX & SWT 2
H Combobox in einer einzelnen Zelle der Jtable AWT, Swing, JavaFX & SWT 2
R Swing Hintergrundfarbe der Zelle in einer JTable bei Markierung AWT, Swing, JavaFX & SWT 2
M Jtable Objecte aus Zelle AWT, Swing, JavaFX & SWT 13
S Swing Zelle einer JTable hervorheben (ohne CellRenderer) AWT, Swing, JavaFX & SWT 3
A JTable Zelle markieren von bis und Löschen AWT, Swing, JavaFX & SWT 6
F JTable soll mit Buttons befüllt werden, aber nicht in jede Zelle einer Spalte AWT, Swing, JavaFX & SWT 3
GianaSisters Swing ComboBox im jTable (in bestimmter Zelle nicht über die ganze Spalte) AWT, Swing, JavaFX & SWT 4
O JButton in Zelle von JTable AWT, Swing, JavaFX & SWT 4
R Drag an Drop JTable Zelle AWT, Swing, JavaFX & SWT 6
T JTable, Popup Fester per Rechtsklick auf Zelle AWT, Swing, JavaFX & SWT 19
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
C Swing JTable zeigt in jeder Zelle einer Reihe denselben Inhalt AWT, Swing, JavaFX & SWT 2
J Swing JTable, jede Zelle ein anderer Title im TitledBorder AWT, Swing, JavaFX & SWT 5
S Swing JTable nach einer Änderung einer Zelle komplett aktualisieren. AWT, Swing, JavaFX & SWT 10
N Methode zum ermitteln der editierte Zeile/Zelle in jTable AWT, Swing, JavaFX & SWT 8
C Swing JTable Zelle mit Einfachklick editieren AWT, Swing, JavaFX & SWT 3
C JTable: Mehrere Farben in einer Zelle darstellen AWT, Swing, JavaFX & SWT 10
T Swing JTable - true zurückbekommen, wenn der Cursor in einer Zelle blinkt AWT, Swing, JavaFX & SWT 7
C JTable markierte Zelle wird bei removeRow nicht mit gelöscht AWT, Swing, JavaFX & SWT 6
Dit_ Verschiedene Icons in einer JTable-Zelle AWT, Swing, JavaFX & SWT 2
A JTable Zelle Padding AWT, Swing, JavaFX & SWT 9
R JTable Hintergrund der Zeile abhängig von Inhalt einer Zelle verändern AWT, Swing, JavaFX & SWT 3
S Swing DnD: Wie finde ich heraus, von welcher Zelle aus im JTable der Drag gestartet wurde? AWT, Swing, JavaFX & SWT 3
E Zelle in JTable nach klick markieren AWT, Swing, JavaFX & SWT 2
O JTable Zelle mit "ENTER" in Editmode setzen AWT, Swing, JavaFX & SWT 4
eskimo328 JTable nächste Zelle nach Eingabe einer Ziffer AWT, Swing, JavaFX & SWT 5
B Swing Einzelne Zelle in JTable soll NICHT auswählbar sein AWT, Swing, JavaFX & SWT 9
A Swing JTable Icon nur in einer Zelle AWT, Swing, JavaFX & SWT 2
B Swing JTable merkt sich die zuletzt selektierte Zelle AWT, Swing, JavaFX & SWT 3
M JTable - verlassen einer Zelle AWT, Swing, JavaFX & SWT 15
R JTable Darstellen der selektierten Zelle braucht lange AWT, Swing, JavaFX & SWT 7
S JTable Probleme wenn ich Zelle verlasse AWT, Swing, JavaFX & SWT 4
S Welches Event beim auswählen einer Zelle? [JTable] AWT, Swing, JavaFX & SWT 3
A Multiple Zeilen in einer JTable Zelle AWT, Swing, JavaFX & SWT 6
W MouseListener für jede Zelle einer JTable AWT, Swing, JavaFX & SWT 4
V JTable verliert Fokus, wie offene Zelle schliessen? AWT, Swing, JavaFX & SWT 5
G jTable, spezille Zelle automatisch füllen AWT, Swing, JavaFX & SWT 13
J JTable: Einzelne Zelle selektieren AWT, Swing, JavaFX & SWT 6
T JPanel in JTable Zelle adden AWT, Swing, JavaFX & SWT 7
T JTable-Zelle mittels JFileChooser befüllen AWT, Swing, JavaFX & SWT 5
S JTable zwei Text-Zeilen in einer Zelle AWT, Swing, JavaFX & SWT 2
N JTable: Informiert werden, wenn User eine Zelle editiert hat AWT, Swing, JavaFX & SWT 2
M JTable: Editieren einer Zelle "von außen" abbreche AWT, Swing, JavaFX & SWT 2
S JCbox in Jtable Zelle nur anzeigen , wenn JCombobox ="a AWT, Swing, JavaFX & SWT 3
S Eine Zeile zu einer JTable hinzufügen wo Zelle selektiert is AWT, Swing, JavaFX & SWT 4
M JTable Zelle editieren AWT, Swing, JavaFX & SWT 2
G Bei JTable eine bestimmte Zelle färben AWT, Swing, JavaFX & SWT 11
V JTable Zelle über befehl "selecten"? AWT, Swing, JavaFX & SWT 5
G JTable-Zeile/Zelle markieren und mir Shortcut in Arbeitsspei AWT, Swing, JavaFX & SWT 3
D JTable: Focus auf Zelle markiert ihren Text zum editieren AWT, Swing, JavaFX & SWT 2
J JList-Item ind JTable-Zelle auswählen. AWT, Swing, JavaFX & SWT 5
R JTable: Jede Zelle mit eigenem ToolTip belegen AWT, Swing, JavaFX & SWT 5
R Drag & Drop einer einzelnen Zelle (JTable) AWT, Swing, JavaFX & SWT 2
T JTable Focus auf Zelle setzen AWT, Swing, JavaFX & SWT 3
R Focus durch "tabben" von JTable Zelle auf andere K AWT, Swing, JavaFX & SWT 8
V JTable: Bei Klick in Zelle -> Ganze Zeile markeiren AWT, Swing, JavaFX & SWT 7
W JTable und mehrere Components in einer Zelle AWT, Swing, JavaFX & SWT 4
S JTree in einer JTable-Zelle AWT, Swing, JavaFX & SWT 6
G JTable: Rahmen bei Focus um Zelle AWT, Swing, JavaFX & SWT 2
W Problem/Absturz bei Zelle nicht editierbar setzen (JTable) AWT, Swing, JavaFX & SWT 6
R JTable - Boolean-Wert aus Zelle auslesen. AWT, Swing, JavaFX & SWT 9
T "..." am Ende der Zelle in JTable AWT, Swing, JavaFX & SWT 2
G JTable Zeilenumbruch innerhalb einer Zelle bzw. columnHeader AWT, Swing, JavaFX & SWT 1
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben