verständnissproblem mit TableModel

kleinfritzchen

Aktives Mitglied
Hallo,
Ich habe ein TableModel das mir Daten in einer Liste verwaltet. In dem Model sind die ganz normalen Metoden implementiert (implements TableModel).
Mein Problem ist das ich nicht ganz verstehe wie man eine Zeile (Datensatz) löschen kann.
hier in dem Link:http://www.java-forum.org/java-faq-beitraege/7035-jtable-teil-2-kommen-daten-tabelle.html
ist beschrieben das Man ein Event zusammenbauen muss und es an das Model senden muss.
Muss ich dafür erst einen Listener in dem Model adden der dann auf das Event reagiert oder geht das automatisch?
Im Endefekt soll man auf eine Button klicken und dann soll der selektierte Satz gelöscht werden (auch aus der Liste!).
Hier mal das Model:
Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

public class InvDatenModel implements TableModel{
	DatenListe<InventurDaten> dl=new DatenListe<InventurDaten>(1000);
//	File dateiName = new File("y:\\Java von eee\\InventurDaten082011.csv");
//	BufferedReader br;
//	String[] z1;
//	String z;
	
	private List<TableModelListener> tableListener = new ArrayList<TableModelListener>();;
	// Auswertungs Bereich
	//DatenListe<InventurDaten> auswertung=new DatenListe<InventurDaten>(1000);
	
	//Konstruktor
	InvDatenModel(File dateiNamee){
		a=new AuswertModel();
		this.dateiName=dateiNamee;
		System.out.println(dateiName);
		System.out.println(dateiName);
		datenLaden();
	}
	//Instanzvariablen
	String[][] daten=new String[500][6];
	InventurDaten satz;
	int anzZeilen, spalten;
	BufferedReader br;
	String z, kopfzeile;
	String[] z1;
	AuswertModel a;
	int x, y;
	float zz;
	private File dateiName;
	
	// Datei auswerten
	public void datenLaden()
	{
		System.out.println("bin da");
		// System.out.println(!(dateiName.exists()));
		if (!(dateiName.exists())){
			System.out.println("Dateipfad falsch");
		}
		System.out.println("Datei ok");
		try {
			
			FileReader fr = new FileReader(dateiName);
			br = new BufferedReader(fr);
			z=br.readLine();
			kopfzeile=z;
			while ((z = br.readLine()) != null) {
				z1 = z.split(";");
				spalten=z1.length;
				System.out.println(z+ z1.length);
				//System.out.println(z);
				//System.out.println(InventurDaten.getAnzDaten());
				satz=new InventurDaten(
						z1[0],
						z1[1],
						Float.parseFloat(z1[2]),
						Float.parseFloat(z1[3]),
						Float.parseFloat(z1[4]),
						z1[5]);
				System.out.println(z1[5]);
				System.out.println(satz.artNr+"\t"+satz.f1+"\t"+satz.f2+"\t"+satz.f3+satz.datum);
				addD(satz);
//				for (int j = 0; j < z1.length; j++) {
//					daten[anzZeilen][j] = z1[j];
//					satz=
//				}
				anzZeilen++;
				//z = br.readLine();
				//System.out.println(z);
			}
			
		} catch (FileNotFoundException e) {
			System.out.println("Datei nicht gefunden");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("Ein Ausgabe fehler");
			e.printStackTrace();
		}
		

	}
	
	public void anzz() throws IOException{
		while((z=br.readLine())!=null){
			anzZeilen +=1;
		}
	}
	
  	public void addD(InventurDaten f) {
		dl.add(f);
		//System.out.println(dl.get(dl.getElementCount()-1).f3);
		a.addAuswertung(f);
		//testausgabe();
		for (TableModelListener l : tableListener) {
			l.tableChanged(new TableModelEvent(this));
		}
	}


	@Override
	public void addTableModelListener(TableModelListener l) {
		tableListener.add(l);
		
	}

	@Override
	public Class<?> getColumnClass(int columnIndex) {
		switch (columnIndex){
		case 0:return String.class;
		case 1:return String.class;
		case 2:return Float.class;
		case 3:return Float.class;
		case 4:return Float.class;
		case 5:return String.class;
		default: return null;
		}
	}

	@Override
	public int getColumnCount() {
		return 6;
	}

	@Override
	public String getColumnName(int columnIndex) {
		switch (columnIndex){
		case 0:return "Artikel Nr";
		case 1:return "Einheit";
		case 2:return "A-\u00d8[mm] / [m]";
		case 3:return "I-\u00d8[mm] / [Kg]";
		case 4:return "Meter";
		case 5:return "Datum";
		default: return null;
		}
	}

	@Override
	public int getRowCount() {
		
		return dl.getElementCount();
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		switch (columnIndex){
			case 0:return dl.get(rowIndex).artNr;
			case 1:return dl.get(rowIndex).einheit;
			case 2:return dl.get(rowIndex).f1;
			case 3:return dl.get(rowIndex).f2;
			case 4:return dl.get(rowIndex).f3;
			case 5:return dl.get(rowIndex).zusText;
			default: return null;
		}
		
		
	}

	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void removeTableModelListener(TableModelListener l) {
		tableListener.remove(l);
		
	}

	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
	}
	
	public void delZeile(int rowIndex){
		TableModelEvent(this,rowIndex,rowIndex,
				TableModelEvent.ALL_COLUMNS,TableModelEvent.DELETE);
	}

	public void speichern(){
		try {
			FileWriter fw=new FileWriter(dateiName);
			System.out.println(kopfzeile);
			fw.write(kopfzeile+"\n");
			for (int i=0;i < dl.getElementCount();i++ ){
				System.out.println("int i:"+i+dl.get(i).toString());
				fw.write(dl.get(i).artNr+";"+
						dl.get(i).einheit+";"+
						dl.get(i).f1+";"+
						dl.get(i).f2+";"+
						dl.get(i).f3+";"+
						dl.get(i).datum+"\n");
			}
			fw.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}

	
}

und hier die Liste:
Java:
public class DatenListe<T> {

	private T[] array;
	private int nextFreeSlot=0;
	
	public DatenListe(int groese){
		array =(T[]) new Object[groese];
	}
	
	public void add(T o){
		if (nextFreeSlot==array.length){
			throw new IllegalStateException("Liste ist voll!");
		}
		array[nextFreeSlot]=o;
		//System.out.println(o);
		nextFreeSlot++;
		
	}
	
	public T get(int index){
		return array[index];
	}
	
	public int getGroese(){
		return array.length;
	}
	
	public int getElementCount(){
		return nextFreeSlot;
	}
}

In der Liste werd ich noch was basteln müssen das der Datensatz auch gelöscht wird aber ich weis nicht ob ich dann die Liste nach dem gelöschten Satz neu generieren muss.

MfG Fritz
 
B

Beni

Gast
ist beschrieben das Man ein Event zusammenbauen muss und es an das Model senden muss.
Muss ich dafür erst einen Listener in dem Model adden der dann auf das Event reagiert oder geht das automatisch?

Wo steht das? Da steht, dass man ein Event bauen muss, und das Model dieses Event verschicken soll. Du musst keine TableModelListener implementieren, du musst sie aufrufen.
Hast du das Beispiel zu "addVehicle" mal angeschaut? Das ist genau das was du selbst bauen musst (nur dass es bei dir halt ein Element gelöscht wird. Das Prinzip ist dasselbe).
 

kleinfritzchen

Aktives Mitglied
Hallo, ich hab folgendes implementiert:
Java:
public void delZeile(int rowIndex){
		dl.del(rowIndex);
	TableModelEvent e=new	TableModelEvent(this,rowIndex,rowIndex,
				TableModelEvent.ALL_COLUMNS,TableModelEvent.DELETE);
	for(TableModelListener l : tableListener){
        l.tableChanged(e);
        fireTableDataChanged();
		}
    
	}
Das funktioniert für das InvTableModel und die Liste.
Problem ist jetzt noch was ist am geschicktesten, ein neues AuswertModel erzeugen oder die dl neu einlesen. bei größeren Datenmengen muss ich erst mal sehen ob ich ein zeit oder Speicherproblem bekomme.:autsch:

MfG Fritz
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Applet JApplet - Verständnissproblem AWT, Swing, JavaFX & SWT 3
A Verständnissproblem bei verschiedenen GUI's AWT, Swing, JavaFX & SWT 6
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
C TableModel zugehörige Table ermitteln AWT, Swing, JavaFX & SWT 3
E Eigenes TableModel für ArrayList<String[]> AWT, Swing, JavaFX & SWT 5
W Neues TableModel und JTable wird nicht refreshed AWT, Swing, JavaFX & SWT 3
D Swing JTable TableModel + RowCount AWT, Swing, JavaFX & SWT 18
JAVAnnik Problem mit TableModel AWT, Swing, JavaFX & SWT 3
S Swing Setzen von TableModel liefert NullPointer AWT, Swing, JavaFX & SWT 6
S TableModel Header wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
K zwei TableModel AWT, Swing, JavaFX & SWT 9
N Swing Eintrag in JTable an dessen TableModel weiterreichen AWT, Swing, JavaFX & SWT 3
hdi Swing Komisches Problem mit TableModel & setAutoCreateRowSorter AWT, Swing, JavaFX & SWT 2
E Swing TableModel fireTableDataChanged führt zu IndexOutOfBoundsException AWT, Swing, JavaFX & SWT 9
F Tablemodel zu mehreren Tabellen AWT, Swing, JavaFX & SWT 6
K JTable +TableModel --> Anpassung der Tabellengröße (Zeilenanzahl) AWT, Swing, JavaFX & SWT 3
K TableModel mit Daten aus Datenbank füllen AWT, Swing, JavaFX & SWT 7
K TableModel Daten übergeben AWT, Swing, JavaFX & SWT 9
L Klick auf JTable -> EditorPane manipulieren, Fragen zu TableModel AWT, Swing, JavaFX & SWT 9
X Swing Daten aus Vector ins TableModel ?? AWT, Swing, JavaFX & SWT 12
E JTable und tablemodel Verständnisproblem AWT, Swing, JavaFX & SWT 3
C Kann Konstruktor von eigenem TableModel nicht nutzen AWT, Swing, JavaFX & SWT 2
D eigenes Tablemodel, Zeile löschen ArrayindexOOB excp AWT, Swing, JavaFX & SWT 4
P Eigenes TableModel abgeleitet von AbstractTableModel (neue rows nicht sichtbar) AWT, Swing, JavaFX & SWT 6
S Table oder TableModel so ueberschreiben, dass Columns minimale Breite haben? AWT, Swing, JavaFX & SWT 2
R JTable - TableModel AWT, Swing, JavaFX & SWT 6
D JTable - TableColumnModel - TableModel AWT, Swing, JavaFX & SWT 3
S JTable nimmt TableModel nicht an AWT, Swing, JavaFX & SWT 4
D Mehrere CheckBoxen im TableModel wechselseitig ausschließen AWT, Swing, JavaFX & SWT 5
R TableModel und Columnmodel - Zusammenspiel? AWT, Swing, JavaFX & SWT 2
G TableModel mit anderen Spalten AWT, Swing, JavaFX & SWT 4
G JTable - TableModel aus ArrayList AWT, Swing, JavaFX & SWT 8
D TableModel + Daten bearbeiten + Daten zurückschreiben AWT, Swing, JavaFX & SWT 9
A JTable, eigenes TableModel und dessen Objekte AWT, Swing, JavaFX & SWT 4
G Frage zu JTable und TableModel AWT, Swing, JavaFX & SWT 4
O TableModel AWT, Swing, JavaFX & SWT 12
V Vector->TableModel->RowSorter:Bei Markierung Index im AWT, Swing, JavaFX & SWT 2
S Daten aus editierbaren TableModel lesen AWT, Swing, JavaFX & SWT 7
F TableModel Spaltenkoepfe benamen, wie? AWT, Swing, JavaFX & SWT 2
F Wie MouseListener bei TableModel anmelden? AWT, Swing, JavaFX & SWT 3
G JTable, TableModel und CellRenderer AWT, Swing, JavaFX & SWT 3
R DataVector bei TableModel - Class Cast Exception AWT, Swing, JavaFX & SWT 9
N TableModel mit CheckBox? AWT, Swing, JavaFX & SWT 5
J Tablemodel AWT, Swing, JavaFX & SWT 2
G jTable + ScrollPane (+ TableModel) AWT, Swing, JavaFX & SWT 7
D invokeLate bei änderung im TableModel? AWT, Swing, JavaFX & SWT 4
G TableModel von JTable wieder entfernen AWT, Swing, JavaFX & SWT 10
G TableModel auswerten und in Datei schreiben AWT, Swing, JavaFX & SWT 3
P JTable TableModel JFreeReport AWT, Swing, JavaFX & SWT 4
T anlegen einer jTable mit TableModel AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben