JTable Vector mit Daten Ordnen bei setAutoCreateRowS

Status
Nicht offen für weitere Antworten.

Arbon

Bekanntes Mitglied
Hallo. Ich hab eine JTable welche Daten aus einem Vektor anzeigt. Der Vektor befindet sich in einem eigenen Model:

Code:
	/**
	 * The Class ExplorerFileTableModel.
	 */
	class ExplorerFileTableModel extends AbstractTableModel {

		/** The data. */
		private Vector<File> data = new Vector<File>();

		/** The column names. */
		private String[] columnNames;

		/** The Constant serialVersionUID. */
		private static final long serialVersionUID = 3751023997792200462L;

		/**
		 * Instantiates a new explorer file table model.
		 * 
		 * @param columnNames
		 *            the column names
		 */
		ExplorerFileTableModel(String[] columnNames) {
			this.columnNames = columnNames;
		}

		/*
		 * (non-Javadoc)
		 * 
		 * @see javax.swing.this.TableModel#getColumnCount()
		 */
		@Override
		public int getColumnCount() {
			return 5;
		}

		/*
		 * (non-Javadoc)
		 * 
		 * @see javax.swing.this.TableModel#getRowCount()
		 */
		@Override
		public int getRowCount() {
			return data.size();
		}

		/*
		 * (non-Javadoc)
		 * 
		 * @see javax.swing.table.AbstractTableModel#getColumnName(int)
		 */
		public String getColumnName(int col) {
			return columnNames[col];
		}

		/*
		 * (non-Javadoc)
		 * 
		 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
		 */
		@SuppressWarnings("unchecked")
		public Class getColumnClass(int c) {
			return getValueAt(0, c).getClass();
		}

		/*
		 * (non-Javadoc)
		 * 
		 * @see javax.swing.this.TableModel#getValueAt(int, int)
		 */
		@Override
		public Object getValueAt(int rowIndex, int columnIndex) {

			File tmpFile = data.get(rowIndex);

			if (tmpFile == null)
				return null;

			if (columnIndex == 0) {
				if (tmpFile.equals(curDirectory.getParentFile()))
					return "...";
				return tmpFile.getName();
			}

			if (columnIndex == 1) {
				return getAttrib(tmpFile);
			}

			if (columnIndex == 2) {
				return getFileSize(tmpFile);
			}

			if (columnIndex == 3) {
				return (ldt
						.plusSeconds(((Long) (tmpFile.lastModified() / 1000))
								.intValue())).toString(dtf);
			}

			if (columnIndex == 4) {
				if (tmpFile.isDirectory())
					return "Ordner";
				String tmp = tmpFile.getName();
				tmp = tmp.replace(".", ":");
				Pattern p = Pattern.compile(":");
				String[] splitted = p.split(tmp);
				if (splitted.length == 0)
					return "Kein Dateityp";
				return splitted[splitted.length - 1];
			}

			return null;

		}

		/**
		 * Adds the value.
		 * 
		 * @param file
		 *            the file
		 */
		public void addValue(File file) {
			data.add(file);
		}

		/**
		 * Removes the all elements.
		 */
		public void removeAllElements() {
			data.removeAllElements();
		}

		/**
		 * Gets the file.
		 * 
		 * @param index
		 *            the index
		 * 
		 * @return the file
		 */
		public File getFile(int index) {
			if (index >= data.size())
				return null;

			return data.get(index);
		}

	}

Wenn ich nun die Tabelle sortiere wird der Vektor nicht aktualisiert, wodurch die Tabelle nicht korrekt funktioniert. Wie kann ich nun den Vektor ebenfalls nach dem selben Schema sortieren? Ich habe dazu etwas gefunden, was Vektoren sortiert:

Code:
	public void sortAllRowsBy(ExplorerFileTableModel model, int colIndex,
			boolean ascending) {
		Vector data = model.getDataVector();
		Collections.sort(data, new ColumnSorter(colIndex, ascending));
		model.fireTableStructureChanged();
	}

	// This comparator is used to sort vectors of data
	/**
	 * The Class ColumnSorter.
	 */
	public class ColumnSorter implements Comparator<Vector<File>> {

		/** The col index. */
		private int colIndex;

		/** The ascending. */
		private boolean ascending;

		/**
		 * Instantiates a new column sorter.
		 * 
		 * @param colIndex
		 *            the col index
		 * @param ascending
		 *            the ascending
		 */
		ColumnSorter(int colIndex, boolean ascending) {
			this.colIndex = colIndex;
			this.ascending = ascending;
		}

		/*
		 * (non-Javadoc)
		 * 
		 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
		 */
		@SuppressWarnings("unchecked")
		public int compare(Vector<File> a, Vector<File> b) {
			Object o1 = a.get(colIndex);
			Object o2 = b.get(colIndex);

			// Treat empty strains like nulls
			if (o1 instanceof String && ((String) o1).length() == 0) {
				o1 = null;
			}
			if (o2 instanceof String && ((String) o2).length() == 0) {
				o2 = null;
			}

			// Sort nulls so they appear last, regardless
			// of sort order
			if (o1 == null && o2 == null) {
				return 0;
			} else if (o1 == null) {
				return 1;
			} else if (o2 == null) {
				return -1;
			} else if (o1 instanceof Comparable) {
				if (ascending) {
					return ((Comparable) o1).compareTo(o2);
				} else {
					return ((Comparable) o2).compareTo(o1);
				}
			} else {
				if (ascending) {
					return o1.toString().compareTo(o2.toString());
				} else {
					return o2.toString().compareTo(o1.toString());
				}
			}
		}
	}

Doch ich weiss jetzt nicht, in welcher Klasse ich welche Funktion überschreiben muss um beim sortieren zu erzielen, dass eben dieser Vektor mitsortiert wird.

mfg
 

Ebenius

Top Contributor
Hmm... Ich habe gerade den Titel nochmal gelesen; Du benutzt den Row Sorter...

Dann stellt sich mir eine völlig andere Frage: Wieso funktioniert denn die Tabelle nicht richtig. Die Tabelle sortiert absichtlich die Daten im Modell nicht, sondern überlässt dies der Darstellung. Wenn dadurch irgendetwas nicht funktioniert, liegt der Fehler an einer anderen Stelle.

Also: Was funktioniert nicht?

Ebenius
 

Arbon

Bekanntes Mitglied
Das Problem ist, dass der Vektor in dem die Daten gespeichert sind nicht auch umsortiert wird. In meinem Fall ist dies nähmlich nötig, da mit klick auf eine zeile der entsprechende Eintrag aus dem Vektor geladen wird. Wenn die Reihenfolge nun nicht mehr stimmt, dann gibt der Vektor natürlich was anderes aus als in der Table steht.
 

Arbon

Bekanntes Mitglied
Ein Beispiel wär nicht schlecht, wenn es dir nicht zuviele Umstände macht.

Soviel ich dass verstanden habe, wird mit diesem Befehl die entsprechende Reihe aus dem Model gesucht, die der ausgewählten Reihe entspricht?
 

Ebenius

Top Contributor
Arbon hat gesagt.:
Soviel ich dass verstanden habe, wird mit diesem Befehl die entsprechende Reihe aus dem Model gesucht, die der ausgewählten Reihe entspricht?
Nicht der ausgewählten Reihe sondern dem übergebenen View-Index. Also wenn Du die Modell-Zeile wissen willst die zur angezeigten Zeile 5 gehört, dann nutzt Du:
Code:
final int modelIndex = table.convertRowIndexToModel(5);

Ich weiß leider nicht, wofür Du ein Beispiel brauchst. Also blind, wann auch immer Du über die View-Indices auf's Modell zugreifen musst, zum Beispiel bei der Selected Row:
Code:
final int selectedModelIndex = table.convertRowIndexToModel(table.getSelectedRow());
Mit dem Index kannst Du dann auf's Modell zugreifen.

Grüße, Ebenius
 

Arbon

Bekanntes Mitglied
Nachdem die Zugriffe alle über eine Methode erfolgen, war es ziemlich einfach einzubinden. Danke!
 

Taneeda

Aktives Mitglied
Ooooh, tausend und einen und noch einen Dank Ebenius, genau das gleiche Problem hatte ich auch ^^
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Problem mit JTable / mit dem Eintragen der Daten aus Vector AWT, Swing, JavaFX & SWT 4
K Swing JTable und Vector AWT, Swing, JavaFX & SWT 4
A Swing JTable mit Vector befüllen AWT, Swing, JavaFX & SWT 2
B JTable Wert in Vector einlesen AWT, Swing, JavaFX & SWT 4
B JTable Vector Exception bei eigenem CellEditor AWT, Swing, JavaFX & SWT 3
S Array/Vector für JTable aufbereiten AWT, Swing, JavaFX & SWT 4
D Vector Datenstruktur für JTable will nicht :-( AWT, Swing, JavaFX & SWT 6
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
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
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
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
S Swing Deselektion in JTable verhindern AWT, Swing, JavaFX & SWT 0
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
N Swing Print JTable mit AbstractTableModel AWT, Swing, JavaFX & SWT 1
Ananaskirsche Swing jTable Reihen zuviel eingefügt AWT, Swing, JavaFX & SWT 12
P im JTable die Schriftfarbe ändern AWT, Swing, JavaFX & SWT 19
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
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
D Swing JTable Renderer Grafikfehler AWT, Swing, JavaFX & SWT 0
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
M Swing JTable GroupableHeader Background Color AWT, Swing, JavaFX & SWT 4
K Swing JTable updaten AWT, Swing, JavaFX & SWT 9
thet1983 Swing MySQL >> JTable AWT, Swing, JavaFX & SWT 5
J JTable bounds ändern durch resizing des Fensters AWT, Swing, JavaFX & SWT 9
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
O JTable linksbündig drucken (nicht der Zelleninhalt) AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben