TableSorter verändert Vector nicht.

Status
Nicht offen für weitere Antworten.
E

Evi

Gast
Hallo Zusamen,

ich habe ein kleines Prgramm, dass aus einer Datei Zeilenweise Strings ausließt. Die einzelnen Wörter dieser Strings sind getrennt durch ein Þ und werden dann in ein Sring[] Array(sodass ich auf jedes Wort einzeln zugreifen kann) gespeichert und das jeweils an einen Vector rangehängt. Letztendlich gehört der Vector zu einem AbstractTableModel und enhält den Inhalt einer Tabelle. Funktioniert auch alles Wunderbar.

Nun habe ich dises Model einem TableSorter zugewiesen und diesen dann meiner JTable, sodass ich einfach die Tabelle nach Spalten Sortieren lassen kann. Funktioniert auch Super...^^ Nur jetzt mein Problem, der TableSorter übernimmt ja nur den Inhalt des AbstractTableModel, hat aber auf die Reihenfolge der Vector Objekte keinen einfluss. Ich möchte aber, wenn ich eine Datei geladen und die Tabelle dann sortiert habe, dass wenn ich sie wieder speichere, auch die Zeilen so gespeichert werden, wie es der TableSorter anzeigt.

Beispiel:

//Inhalt der Datei x.txt:

WurstÞHansÞ14ÞSchüler
KunsÞPaulÞ15ÞSchüler
TrautÞWalterÞ46ÞLeher

//wird geladen und die Tabelle dann sortiert, wonach die Datei als x.txt abgespeichert wird und so aussehen sollte:

KunsÞPaulÞ15ÞSchüler
TrautÞWalterÞ46ÞLeher
WurstÞHansÞ14ÞSchüler


---

Leider blicke ich da beim TableSorter noch nicht ganz durch und die Treats im Forum haben mir auch nicht weiter geholfen. Wie könnte ich die Sache angehen... oder habe ich einen grundsätzlichen logischen Fehler gemacht?!

Danke

Evi
 
E

Evi

Gast
mh... oder um meine Frage noch etwas zu spezifizieren: Wie kann ich den (sortiereten)Inhalt vom TableSorter an mein AbstractTablemodel übergeben, sodass auch dieses "sortiert" ist?!
 
B

Beni

Gast
*Was* für ein TableSorter? Es gibt da x Implementationen...

Implementiert der Sorter das TableModel? Falls ja, könntest du mit "getValueAt" einfach alles auslesen (das wäre dann ja sortiert).
 

byte

Top Contributor
wenn der table sich den content aus dem vector zieht, könntest du stattdessen auch direkt den vector sortieren mit Collections#sort().
 
G

Guest

Gast
Beni hat gesagt.:
*Was* für ein TableSorter?

Ich meinte die Standart implementation von Sun. Link ...

byto hat gesagt.:
wenn der table sich den content aus dem vector zieht, könntest du stattdessen auch direkt den vector sortieren mit Collections#sort().

Naja wie ich schon geschrieben habe, sind meine Informationen jeweils in einem String[] Array, dass an den Vector angefügt wurde... wei soll ich da nach einzelnen Arrey-Elementen sortieren lassen?!
 
R

Roar

Gast
wie sieht denn dein code jetzt aus? ich nehme an in etwa so:
for(...)
speichere(meinTableModel.getValueAt(bu, buba);

anstelle meinTableModel greifst du einfach auf die instanz vom TableSorter zu.

^^
 
E

Evi

Gast
Mh.. ich wüsste nicht, wie ich das machen soll... ich kann ja aus der Tabelle herraus ja gar nicht mehr auf meinen Sorter zugreifen.. :(?! Oder wüsstest Du wo?

hier mein Code:

Adress1.java
Code:
package de.fhtw.adress;

public class Adress1 {
	public static void main(String[] args) {
		TFenster TabellenFenster = new TFenster();
	}
}

TFenster.java

Code:
package de.fhtw.adress;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.filechooser.FileFilter;

class TFenster extends JFrame {
	AdressTabelle TModel = new AdressTabelle();
	//Festlegung des TableSorter von Sun als Tabellenmodel
	TableSorter sorter = new TableSorter(TModel);
	JTable Tabelle = new JTable(sorter);
	int Selected = 0;
	
	TFenster() {
		super("JTable liest aus Datei");
		setLayout(new BorderLayout(5, 5));
		setSize(500, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		sorter.setTableHeader(Tabelle.getTableHeader());
		
		Tabelle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
		ListSelectionModel rowSM = Tabelle.getSelectionModel(); 
		rowSM.addListSelectionListener(new ListSelectionListener() 
		{ 
		    public void valueChanged(ListSelectionEvent e) 
		    { 
		        ListSelectionModel lsm =(ListSelectionModel)e.getSource(); 
		        if (lsm.isSelectionEmpty()) 
		        { 
		        	Selected = 0; 
		        } 
		        else 
		        { 
		            Selected = lsm.getMinSelectionIndex()+1; 
		            Tabelle.repaint();
		        } 
		    } 
		}); 
	
		JMenuBar mbar = new JMenuBar();
		JMenu m1 = new JMenu( "Start" );
		JMenu m2 = new JMenu( "Bearbeiten" );
		
		JMenuItem mneu =  new JMenuItem("Neue Tabelle");
	    mneu.addActionListener( new ActionListener() {
		public void actionPerformed( ActionEvent e ) {
			TModel.removeall();
	        TModel.fireTableDataChanged();
	    }});
		
		JMenuItem moeffnen =  new JMenuItem("Öffnen...");
		moeffnen.addActionListener( new ActionListener() {
	    public void actionPerformed( ActionEvent e ) {
	    	JFileChooser fc = new JFileChooser();
	        
	        fc.setFileFilter( new FileFilter() {
	              public boolean accept( File f ) {
	                return f.isDirectory() ||
	                       f.getName().toLowerCase().endsWith(".adr");
	              }
	              public String getDescription() {
	              return "Adress Dateien (*.adr)";
	              }
	        });
	        
	        int returnVal = fc.showOpenDialog( null );
	        
	        if ( returnVal == JFileChooser.APPROVE_OPTION )
	        {
	          File file = fc.getSelectedFile();
	          TModel.loadfromfile(file.getAbsolutePath());
	          TModel.fireTableDataChanged();
	        }
	    }});
	    	
		JMenuItem mspeichern = new JMenuItem("Speichern...");
		mspeichern.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){ 
				JFileChooser s = new JFileChooser();
			    s.setFileFilter( new FileFilter() {
			          public boolean accept( File f ) {
			            return f.isDirectory() ||
			                   f.getName().toLowerCase().endsWith(".adr");
			          }
			          public String getDescription() {
			            return "Adress Dateien (*.adr)";
			          }
			        } );
			    int returnVal = s.showSaveDialog(null);
			    if ( returnVal == JFileChooser.APPROVE_OPTION )
			    {
			      File file = s.getSelectedFile();
			      if (file.getName().toLowerCase().endsWith(".adr")==true)
			      TModel.savetofile(file.getAbsolutePath()); else
			      TModel.savetofile(file.getAbsolutePath()+".adr");
			    }
			}
		});
	    
	    JMenuItem mbeenden =  new JMenuItem("Beenden");
	    mbeenden.addActionListener( new ActionListener() {
		public void actionPerformed( ActionEvent e ) {
			 System.exit(0);
	    }});
		
	    JMenuItem mhinzu =  new JMenuItem("Zeile hinzufügen");
	    mhinzu.addActionListener( new ActionListener() {
		public void actionPerformed( ActionEvent e ) {
			String sline = "";
			sline = javax.swing.JOptionPane.showInputDialog(null,"Name:");
			sline = sline +"Þ"+ javax.swing.JOptionPane.showInputDialog(null,"E-Mail");
			sline = sline +"Þ"+ javax.swing.JOptionPane.showInputDialog(null,"Datum");
			sline = sline + "ÞfalseÞ";
			TModel.addElement(sline);
		}});
	    
	    JMenuItem mloesch =  new JMenuItem("Zeile löschen");
	    mloesch.addActionListener( new ActionListener() {
		public void actionPerformed( ActionEvent e ) {
			if (Selected > 0) TModel.removeline(Selected-1);
			
	    }});
	    
		m1.add(mneu);
	    m1.add(moeffnen);
		m1.add(mspeichern);
		m1.add(mbeenden);
		m2.add(mhinzu);
		m2.add(mloesch);
		
		mbar.add(m1);
		mbar.add(m2);
		
		getContentPane().add(mbar,BorderLayout.NORTH );
		getContentPane().add(new JScrollPane(Tabelle),BorderLayout.CENTER);
		
		
		setVisible(true);
	}
}

AdressTabelle.java
Code:
package de.fhtw.adress;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Vector;
import javax.swing.AbstractListModel;
import javax.swing.table.AbstractTableModel;

class AdressTabelle extends AbstractTableModel {
	JListData Vektor = new JListData("c:/test.adr");

	public String getColumnName(int column) {
		switch (column) {
		case 0: return "Nr";
		case 1: return "Name";
		case 2: return "E-Mail";
		case 3: return "Datum";
		case 4: return "Benachrichtigt";
		}
		return "";
	}

	public int getRowCount() {
		return Vektor.getSize();
	}

	public int getColumnCount() {
		return 5;
	}

	public Class getColumnClass(int columnIndex) {
		return getValueAt(0, columnIndex).getClass();
	}

	public boolean isCellEditable(int rowIndex, int columnIndex) {
		if (columnIndex == 0)
			return false;
		else
			return true;
	}

	public void setValueAt(Object val, int row, int column) {
		Vektor.changeElement(row, column, val);

		fireTableCellUpdated(row, column);
	}

	public Object getValueAt(int row, int col) {
		if (col == 0) {
			return Integer.toString(row + 1);
		} else {
			Object[] skette = (Object[]) Vektor.getElementAt(row);
			return skette[col - 1];

		}
	}
	
	public void addElement(String sline) {
		 Vektor.addElement(sline);
		 fireTableDataChanged();
	}
	
	public void removeline(int i) {
		 Vektor.removeElementAt(i);
		 fireTableDataChanged();
		 fireTableStructureChanged();
	}
	
	public void loadfromfile(String f) {
		 Vektor.loadnewData(f);
	}
	
	public void removeall() {
		 Vektor.removeAllElements();
	}
	
	public void savetofile(String f) {
		 Vektor.savetofile(f);
	}
}

class JListData extends AbstractListModel {

	private Vector dlist; // Datenspeicher

	public JListData(String text) {
		dlist = new Vector();
		makeData(text);
	}

	private Vector makeData(String text) {

		// einlesen der Daten -------------
		dlist = einlesenVomFile(text);
		
		// Datenspeicher zurückgeben
		return dlist;
	}

	public int getSize() {
		return dlist.size();
	}
	
	public void loadnewData(String f) {
		makeData(f);
	}
	
	public Object getElementAt(int index) {

		return dlist.elementAt(index);
	}

	public void removeAllElements() {
		dlist.removeAllElements();
		fireIntervalRemoved(this, 0, dlist.size());
	}

	public void removeElementAt(int index) {
		dlist.remove(index);
		fireIntervalRemoved(this, 0, dlist.size());
	}

	public void addElement(String s) {
		String zeile = s;

		Object[] rowData = new Object[4];

		for (int i = 0; i < 4; i++) {
			if (i < 3)
				rowData[i] = (zeile.substring(0, zeile.indexOf("Þ")));
			else {
				if (zeile.substring(0, zeile.indexOf("Þ")).equals("t"))
					rowData[i] = new Boolean(true);
				else
					rowData[i] = new Boolean(false);
			}
			zeile = zeile.substring(zeile.indexOf("Þ") + 1, zeile.length());
		}

		dlist.addElement(rowData);
		fireIntervalAdded(this, dlist.size() - 1, dlist.size());
	}

	public void changeElement(int index, int x, Object ob) {
		Object[] skette = (Object[]) dlist.elementAt(index);
		skette[x - 1] = ob;
		dlist.setElementAt(skette, index);
	}
	
	private Vector einlesenVomFile(String text) {
		BufferedReader in;
		String zeile, dateiname = text;
		Vector data = new Vector(); // Speicher anlegen
		try {
			// Stream öffnen
			in = new BufferedReader(new FileReader(new File(dateiname)));
			// Stream zeilenweise lesen
			while ((zeile = in.readLine()) != null) {
				Object[] rowData = new Object[4];
				for (int i = 0; i < 4; i++) {
					if (i < 3)
						rowData[i] = (zeile.substring(0, zeile.indexOf("Þ")));
					else {
						if (zeile.substring(0, zeile.indexOf("Þ")).equals("t"))
							rowData[i] = new Boolean(true);
						else
							rowData[i] = new Boolean(false);
					}
					zeile = zeile.substring(zeile.indexOf("Þ") + 1, zeile.length());
				}
				data.addElement(rowData);
			}
			in.close(); // Stream schließen
		} catch (IOException exp) {
			System.out.println("Dateifehler beim Lesen" + exp.getMessage());
		}
		// Rückgabe des Vectors unsortiert
		return data;
	}
	
	void savetofile(String datei){
 		String Zeile;
 		Object[] rowData = new Object[4];
 		try {
			BufferedWriter out = new BufferedWriter(new FileWriter(new File(datei)));
			for(int i = 0; i < dlist.size(); i++){
				    rowData = (Object[])dlist.elementAt(i);
				    Zeile = rowData[0]+"Þ"+rowData[1]+"Þ"+rowData[2]+"Þ"+rowData[3]+"Þ";
				    out.write(Zeile);
					out.newLine();
			}
			out.close();
 		} catch (IOException e) {
			System.out.println("Dateifehler beim Schreiben" + e.getMessage());
		}
 		
 	}//end of method savetofile
}

gruß

Evian
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Wegen TableSorter wird falsche Zeile einer Tabelle gelöscht? Java Basics - Anfänger-Themen 2
G TableSorter und DefaultTableModel Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
J Warum wird Array durch Methode ohne Rückgabewert verändert? Java Basics - Anfänger-Themen 5
N Variablen Array-Variable verändert sich Java Basics - Anfänger-Themen 12
D Eclipse irreparabel verändert? Java Basics - Anfänger-Themen 4
H Array wird verändert ohne Rückgabe? Java Basics - Anfänger-Themen 7
C Referenzvariable wird verändert Java Basics - Anfänger-Themen 8
GianaSisters ArrayList-Kopie verändert Original Java Basics - Anfänger-Themen 5
H überprüfen, ob Objekt verändert wurde Java Basics - Anfänger-Themen 11
C Objekt X über Methode aus anderer Klasse verändert Java Basics - Anfänger-Themen 3
L Variable wird nicht verändert? Java Basics - Anfänger-Themen 7
S Abstrakte Klasse, festlegen, dass Methode verändert werden muss. Java Basics - Anfänger-Themen 4
Q Vector verändert trotz final seine Größe Java Basics - Anfänger-Themen 5
D Aufruf von Klasse verändert ungewollt Werte Java Basics - Anfänger-Themen 14
B Methode, die Variable verändert ? Java Basics - Anfänger-Themen 4
G JList größe verändert sich Java Basics - Anfänger-Themen 2
S Problem bei Java Applet (Applet verändert sich nicht) Java Basics - Anfänger-Themen 2
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
C Werte im Vector in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 14
C Vector-Inhalt in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 6
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
Z Vector in jTextField/jLabel darstellen Java Basics - Anfänger-Themen 4
P Objekte in Vector werden überschrieben Java Basics - Anfänger-Themen 4
P Array in Vector speichern Java Basics - Anfänger-Themen 2
E Methoden new Vector().add(x).add(x); ? Java Basics - Anfänger-Themen 5
F Vector istGeordnet Java Basics - Anfänger-Themen 15
R Vector-Filterfunktion Java Basics - Anfänger-Themen 4
Todesbote Map (Key=String; Value = Vector) Value/Vector sortieren Java Basics - Anfänger-Themen 13
J Vector Manipulieren.. Wie? Java Basics - Anfänger-Themen 16
M Vector eines Vectors einzeln ausgeben Java Basics - Anfänger-Themen 9
K String kommt schon in Vector vor? Java Basics - Anfänger-Themen 36
J Erzeugung eines Vector-Objekts - Frage zum Typ Java Basics - Anfänger-Themen 3
H Zugriff auf Vector Element Java Basics - Anfänger-Themen 2
C Vector erzeugt neue Indizes nach Input Java Basics - Anfänger-Themen 2
A Author in Vector Java Basics - Anfänger-Themen 22
M Vector überschreibt Elemente bei add()-Methode Java Basics - Anfänger-Themen 10
T Elemente im Vector werden einfach überschrieben! Java Basics - Anfänger-Themen 3
K Collections Vector zu String casten Java Basics - Anfänger-Themen 4
U Wozu dient ein Vector in Java? Java Basics - Anfänger-Themen 6
S Vector mit beliebigen Klassen an Funktion übergeben Java Basics - Anfänger-Themen 20
B Globale vector? Java Basics - Anfänger-Themen 7
E 2 Dimensionaler Vector Java Basics - Anfänger-Themen 5
T Map<String, Vector>? Java Basics - Anfänger-Themen 11
P Collections Vector füllen in for-Schleife Java Basics - Anfänger-Themen 3
J Vector Addition Java Basics - Anfänger-Themen 5
M 2D Vector Java Basics - Anfänger-Themen 2
N IndexOutOfBoundsException: Source does not fit in dest beim Kopieren von ArrayList in Vector Java Basics - Anfänger-Themen 4
M Umwandlung von Array in Vector und umgekehrt Java Basics - Anfänger-Themen 6
E Datentypen Klasse Vector aus der Standard-API anwenden Java Basics - Anfänger-Themen 7
D Klasse Vector entwerfen Java Basics - Anfänger-Themen 7
A Arrays vs Liste vs Vector Java Basics - Anfänger-Themen 30
H in for Schleife über Vector iterieren Java Basics - Anfänger-Themen 2
S Datentypen Vector auslesen Java Basics - Anfänger-Themen 12
yampi Objektsammlung - Hashtable, Vector, Arrays Java Basics - Anfänger-Themen 8
T Vector-Positin anzeigen Java Basics - Anfänger-Themen 3
C Vector - obsolete collection Java Basics - Anfänger-Themen 1
C Vector<Object> Probleme Java Basics - Anfänger-Themen 38
C Datentypen Probleme mit Vector.contains() Java Basics - Anfänger-Themen 10
M Datentypen function(Vector<SuperClass>), Vector<Subclass> Java Basics - Anfänger-Themen 6
L Vector Sortieren Java Basics - Anfänger-Themen 8
B Vector in Table ersetzen Java Basics - Anfänger-Themen 4
B Werte einer Spalte aus DB in einen Vector schreiben Java Basics - Anfänger-Themen 15
kitz Telefonbuch (Vector) Java Basics - Anfänger-Themen 17
E Arraylist mit Daten aus Vector füllen Java Basics - Anfänger-Themen 7
S Vector -> String JComboBox Java Basics - Anfänger-Themen 11
F Vector wird überschrieben Java Basics - Anfänger-Themen 8
T Vector sortiern Java Basics - Anfänger-Themen 7
C Frage zu Vector und muliplizieren des Inhaltes Java Basics - Anfänger-Themen 2
S Vector von eigenen Klassen Java Basics - Anfänger-Themen 2
J Collection Vector Java Basics - Anfänger-Themen 8
Streeber ArrayList/Vector, mehrdimensional Java Basics - Anfänger-Themen 11
N Was ist der Unterschied zwischen ArrayList und Vector? Java Basics - Anfänger-Themen 3
babel Einen Vector/Liste mit Daten prüfen Java Basics - Anfänger-Themen 31
B Hilfe zum einem Problem mit Vector Java Basics - Anfänger-Themen 8
H Vector - Fehler? Java Basics - Anfänger-Themen 2
babel einen Vector nach Datum sortieren Java Basics - Anfänger-Themen 21
T Array-Vector Problem Java Basics - Anfänger-Themen 18
P Vector und Exception Java Basics - Anfänger-Themen 7
K Vector Java Basics - Anfänger-Themen 3
K Vector Java Basics - Anfänger-Themen 10
babel ein Vector mit verschiedenen Werten auslesen und berechnen Java Basics - Anfänger-Themen 34
T Object aus Vector übergeben Java Basics - Anfänger-Themen 2
B Vector<Point> als Rückgabewert Java Basics - Anfänger-Themen 23
L Vector einem Array hinzufügen Java Basics - Anfänger-Themen 14
P Vector mit double Java Basics - Anfänger-Themen 3
P Vector Elemente auslesen Java Basics - Anfänger-Themen 9
N Anfängerfrage richtige Syntax und Frage zu Vector Java Basics - Anfänger-Themen 7
C Unterschied zwischen ArrayList und Vector Java Basics - Anfänger-Themen 2
W Vector mit String[] auslesen Java Basics - Anfänger-Themen 4
Povlsen84 Initlialisierung, Vector, serialVersionUID . kleine Fragen Java Basics - Anfänger-Themen 4
B Dopplete aus Vector entfernen Java Basics - Anfänger-Themen 8
E Vector Fehler bei allen Methoden von Vector Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben