Zellen in JTable alphabetisch sortieren

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich will die einzelnen Zellen in JTable alphabetisch anordnen
wie geht das??
 

thE_29

Top Contributor
entweder du nimmst sortedtable oder andere tables die das können oder du nimmst mein JTable aus den FAQs oder siehst dir einfach nur den Sortdecorator von mir an und lässt dich inspirieren ;)
 
G

Guest

Gast
ich habe mir jetzt diesen code von dir kopiert:
Code:
public class SortDecorator 
	implements TableModel, TableModelListener 
{ 
  private TableModel realModel; 
  private int indexes[]; 
  public static final int LOGERR = 1; //Lognummer schwerer Fehler 
  public static final int LOGSELECT = 4; //Lognummer Selektion 
  public static final int LOGFKT = 7; //Lognummer Funktionslog 
  private int iColumn = 0; 

  /**************************************************************************** 
   * Konstruktor fürs Sortieren 
   * @param model model das übergeben wird 
   ***************************************************************************/ 
  public SortDecorator(TableModel model) 
  { 
//	  LogViewer.clog.writeNewLog(LogViewer.objPara,LOGFKT, "Konstruktor SortDecorator(TableModel)"); 
	if (model == null) 
	{ 
	  LogViewer.clog.writeNewLog(LogViewer.objPara, LOGERR, 
								 "null models are not allowed"); 

	  throw new IllegalArgumentException("null models are not allowed"); 
	} 
	this.realModel = model; 
	realModel.addTableModelListener(this); 
	allocate(); 
	//  LogViewer.clog.writeNewLog(LogViewer.objPara,LOGFKT, "Ende Konstruktor SortDecorator"); 
  } 



  /**************************************************************************** 
   * wenn sich was ändert 
   * @param tableModelEvent t 
   ***************************************************************************/ 
  public void tableChanged(TableModelEvent tableModelEvent) 
  { 
//	  LogViewer.clog.writeNewLog(LogViewer.objPara,LOGFKT, "tableChanged(TableModelEvent)"); 
	allocate(); 
//	  LogViewer.clog.writeNewLog(LogViewer.objPara,LOGFKT, "Ende tableChanged()"); 
  } 



  /**************************************************************************** 
   * neue indexes werden allociert 
   ***************************************************************************/ 
  private void allocate() 
  { 
//	  LogViewer.clog.writeNewLog(LogViewer.objPara,LOGFKT, "allocate()"); 
	indexes = new int[getRowCount()]; 

	for (int i = 0; i < indexes.length; i++) 
	{ 
	  indexes[i] = i; 
	} 

//	  LogViewer.clog.writeNewLog(LogViewer.objPara,LOGFKT, "Ende allocate()"); 
  } 



  /**************************************************************************** 
   * Funktion die nach der übergebenen Spalte sortiert 
   * @param column Spalte zum Sortieren 
   ***************************************************************************/ 
  public void sort(int column) 
  { 
	LogViewer.clog.writeNewLog(LogViewer.objPara,LOGFKT, "Anfang von sort(int " + column + ")"); 
	GregorianCalendar zeit = new GregorianCalendar(); 
	//Zuweisung der Spalte 
	iColumn = column; 
	//ruft den Quicksort mit rowcount -1 auf 
	try 
	{ 
	  quicksort(0, realModel.getRowCount() - 1); 
	} 
	catch (Exception ex) 
	{ 
	  ex.printStackTrace(System.out); 
	  LogViewer.clog.writeNewLog(LogViewer.objPara, ex); 
	} 

	//Alter Sort - Bubble Sort 
//	  for (int i = 0; i < rowCount; i++) 
//	  { 
//		if (i == rowCount / 2) 
//		{ 
//		  System.out.println("50% sortiert; Line: " + i + " von: " + rowCount); 
//		} 
//		for (int j = i + 1; j < rowCount; j++) 
//		{ 
//		  if (compare(indexes[i], indexes[j], column) < 0) 
//		  { 
//			swap(i, j); 
//		  } 
//		} 
//	  } 
	GregorianCalendar zeit2 = new GregorianCalendar(); 
	//Ausgabe wielange er fürs sortieren gebraucht hat in Millisekunden 
	System.out.println("Fürs SORTIEREN gebrauchte Millsekunden: " + 
					   ( (zeit2.getTimeInMillis() - zeit.getTimeInMillis()))); 
   LogViewer.clog.writeNewLog(LogViewer.objPara,LOGFKT, "Ende sort(..)"); 
  } 



  /*************************************************************************** 
   * Führt den Quicksort durch 
   * @param lo niedrigstes 
   * @param hi höchstes 
   **************************************************************************/ 
  private void quicksort(int lo, int hi) 
  { 
	int i = lo, j = hi; 
	//holt sich den mittleren String 
	String a = ( (String) realModel.getValueAt(indexes[ (lo + hi) / 2], iColumn)). 
		toLowerCase(); 
	//  Aufteilung 
	while (i <= j) 
	{ 
	  //solange der mittlere String kleiner ist, wird erhöht 
	  while (get(indexes[i]).compareTo(a) < 0) 
		i++; 
	  //solange der mittlere String größer ist, wird erniedrigt 
	  while (get(indexes[j]).compareTo(a) > 0) 
		j--; 
	  //wenn i kleiner als j ist wird getauscht 
	  if (i <= j) 
	  { 
		swap(i, j); 
		i++; 
		j--; 
	  } 
	} 
	// Rekursion 
	if (lo < j) 
	  quicksort(lo, j); 
	if (i < hi) 
	  quicksort(i, hi); 
  } 


  /*************************************************************************** 
   * Funktion gibt einen String an der gewünschten Stelle zurück! 
   * Spalte wurde im sort vorgemerkt 
   * @param x welche Reihe 
   * @return den String 
   ***************************************************************************/ 
  private String get(int x) 
  { 
	String str = ""; 
	try 
	{ 
	  str = ( (String) realModel.getValueAt(x, iColumn)).toLowerCase(); 
	} 
	catch (Exception ex) 
	{ 
	  ex.printStackTrace(System.out); 
	  LogViewer.clog.writeNewLog(LogViewer.objPara,ex); 
	} 
	finally 
	{ 
	  return str; 
	} 
  } 

  /**************************************************************************** 
   * Funktion die das austauschen 2er Objekte mittles index vornimmt 
   * @param i index 1 
   * @param j index 2 
   ***************************************************************************/ 
  public void swap(int i, int j) 
  { 
	int tmp = indexes[i]; 
	indexes[i] = indexes[j]; 
	indexes[j] = tmp; 
  } 

//Nur für den alten (Bubble) Sort gebraucht 
//	/**************************************************************************** 
//	 * Funktion die 2 werte in einer spalte vergleicht 
//	 * @param i wert 1 
//	 * @param j wert 2 
//	 * @param column spalte 
//	 * @return den höheren wert?? keine Ahnung 
//	 ***************************************************************************/ 
//	public int compare(int i, int j, int column) 
//	{ 
//	  Object io = realModel.getValueAt(i, column); 
//	  Object jo = realModel.getValueAt(j, column); 
// 
//	  int c = jo.toString().toLowerCase().compareTo(io.toString().toLowerCase()); 
//	  System.out.println( (c < 0) ? -1 : ( (c > 0) ? 1 : 0)); 
//	  return (c < 0) ? -1 : ( (c > 0) ? 1 : 0); 
//	} 


  /**************************************************************************** 
   * Liefert die Zeilen zurück 
   * @return die Zeilen 
   ***************************************************************************/ 
  public int getRowCount() 
  { 
	return realModel.getRowCount(); 
  } 


  /**************************************************************************** 
   * Liefert die Spaltenanzahl zurück 
   * @return Spaltenanzahl 
   ***************************************************************************/ 
  public int getColumnCount() 
  { 
	return realModel.getColumnCount(); 
  } 


  /**************************************************************************** 
   * Liefert den Spaltennamen zurück 
   * @param int0 welche Spalte 
   * @return den Namen der Spalte 
   ***************************************************************************/ 
  public String getColumnName(int int0) 
  { 
	return realModel.getColumnName(int0); 
  } 



  /**************************************************************************** 
   * Liefert die Spaltenklasse zurück 
   * @param int0 welche Spalte 
   * @return die Klasse der gewählten Spalte 
   ***************************************************************************/ 
  public Class getColumnClass(int int0) 
  { 
	return realModel.getColumnClass(int0); 
  } 


  /**************************************************************************** 
   * Liefert zurück ob die Zelle editierbar ist oder nicht 
   * @param int0 x Koordinate 
   * @param int1 y Koordinate 
   * @return true oder false 
   ***************************************************************************/ 
  public boolean isCellEditable(int int0, int int1) 
  { 
	return realModel.isCellEditable(int0, int1); 
  } 



  /**************************************************************************** 
   * Liefert einen Wert zu einer bestimmten x und y Koordinate zurück 
   * @param int0 x Koordinate 
   * @param int1 y Koordinate 
   * @return Objekt auf den Koordinaten 
   ***************************************************************************/ 
  public Object getValueAt(int int0, int int1) 
  { 
	return realModel.getValueAt(indexes[int0], int1); 
  } 


  /**************************************************************************** 
   * Setzt ein Objekt an der gewissen stelle 
   * @param object welches objekt 
   * @param int1 x koordinate 
   * @param int2 y koordinate 
   ***************************************************************************/ 
  public void setValueAt(Object object, int int1, int int2) 
  { 
	realModel.setValueAt(object, indexes[int1], int2); 
  } 


  /**************************************************************************** 
   * added einen neuen TableModelListener 
   * @param tableModelListener welchen Listener 
   ***************************************************************************/ 
  public void addTableModelListener(TableModelListener tableModelListener) 
  { 
	realModel.addTableModelListener(tableModelListener); 
  } 


  /**************************************************************************** 
   * Removed den alten TableModellistener 
   * @param tableModelListener welcher listener 
   ***************************************************************************/ 
  public void removeTableModelListener(TableModelListener tableModelListener) 
  { 
	realModel.removeTableModelListener(tableModelListener); 
  } 
}


ist das der richtige??
 
G

Guest

Gast
geht das nicht ein wenig einfacher??
ich verstehe das net so richtig

gibts keine fertigen methoden??
 
G

Guest

Gast
wenn ich die erste methode kopiere kommen gelich fehler
wo muss ich das den einfügen??
Code:
public class Editor 
{ 

  
  public static void main( String[] args )throws IOException 
  { 
  
      
	 BufferedReader eingabe = new BufferedReader(new FileReader("DYN_cyclist.txt")); 
	 int gelesen; 
	 String eingabezeile; 
      
	 eingabezeile=eingabe.readLine(); 

	 Vector input = new Vector();  // #### in diesem Vector speichern 

	 while( eingabezeile != null ) 
	 { 
		StringTokenizer  token= new StringTokenizer (eingabezeile); 
      
		String[] felder =eingabezeile.split("\\|"); 
        
		StringBuffer text =new StringBuffer(10); 
		  input.add( felder ); 
		  eingabezeile=eingabe.readLine(); 
      
	 } 
        
    
	 JMenuBar leiste=new JMenuBar(); 
	 JMenu menu1 =new JMenu("Datei"); 
	 JMenuItem item1 =new JMenuItem("Laden"); 
	 JMenuItem item2=new JMenuItem("Speichern"); 
	 menu1.add(item1); 
	 menu1.add(item2); 
	 leiste.add(menu1); 
	 Object rowData[][] =  (Object[][])input.toArray( new Object[ input.size() ][] ); 

	 String  columnNames[] = { habe ich weggelassen
		 }; 
    
		 JTable table = new JTable( rowData, columnNames ); 
		 JFrame frame = new JFrame(); 
        
		 frame.getContentPane().add( new JScrollPane(table) ); 
		 table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF ); 
		 frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
		 frame.pack(); 
		 frame.setVisible( true ); 
		 frame.setJMenuBar(leiste); 
		 table.setAutoCreateColumnsFromModel(false); 
		 
  
  
  
              
  } 
}
 

thE_29

Top Contributor
du hast keinen Ahnung von JTables :) (scheint einfach so..)

ich würd dir benis tutorials in den FAQs für JTables empfehlen und nachher kannst du dein meins nehmen (dann verstehst du es auch)!

Mein Jtable baut darauf auf, das du dich mit JTables und Java auskennst! Also wenn dir JTable was neues ist, dann wirst du mit meinem JTable net weit kommen!

Und wo du den sourcecode reinwillst versteh i sowieso net?
Und was für Fehler?!?
 
G

Guest

Gast
ich habe jetzt mal zum testen die beispiele von beni kopiert (JTable sotierung)
dabei komme aber folgende fehler:
Code:
java.lang.Error: Unresolved compilation problems: 
	DefaultSortTableHeaderRenderer cannot be resolved (or is not a valid type) for the field SortedTable.renderer
	DefaultSortTableHeaderRenderer cannot be resolved or is not a type
	DefaultSortTableHeaderRenderer cannot be resolved or is not a type
	DefaultSortTableHeaderRenderer cannot be resolved or is not a type
	SortableTableModel cannot be resolved (or is not a valid type) for the parameter model of the method SortedTable
	SortableTableModel cannot be resolved or is not a type
	SortableTableModel cannot be resolved or is not a type
	renderer cannot be resolved or is not a field
	SortedTableListener cannot be resolved or is not a type
	SortedTableListener cannot be resolved (or is not a valid type) for the parameter listener of the method addSortedTableListener
	SortedTableListener cannot be resolved (or is not a valid type) for the parameter listener of the method removeSortedTableListener
	SortedTableListener cannot be resolved or is not a type
	SortedTableListener cannot be resolved or is not a type
	renderer cannot be resolved or is not a field
	DefaultSortTableHeaderRenderer cannot be resolved or is not a type
	DefaultSortTableHeaderRenderer cannot be resolved or is not a type
	renderer cannot be resolved or is not a field

	at forum.SortedTable.<init>(SortedTable.java:43)
	at JTableDemo.main(JTableDemo.java:43)
Exception in thread "main"
 
G

Guest

Gast
daher habe ich ja auch den code für die sortierung :D
deswegen wundert es mich das es nicht geht
 

thE_29

Top Contributor
du weißt nicht wirklich was ein JTabel ist
dann kopierst du den source (irgendeinen teil, wir wissen ja nichtmal welchen) in dein Programm
dann wirfst du uns einen Fehler auf den Kopf

und wir sollen jetzt rausfinden wo dein Problem ist?
Glaub das Problem ist, das du das FAQ einfach schritt für schritt durchmachen solltest!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
A Swing JTable Umgang mit Zellen AWT, Swing, JavaFX & SWT 2
S Swing Zeilenumbruch in JTable Zellen AWT, Swing, JavaFX & SWT 3
M Swing Jtable zellen zentrieren AWT, Swing, JavaFX & SWT 4
V JTable: Zugriff auf einzelne Zellen AWT, Swing, JavaFX & SWT 4
M JTable Zeilen und Zellen einfärben AWT, Swing, JavaFX & SWT 11
GUI-Programmer JTable - zentrierte Zellen AWT, Swing, JavaFX & SWT 2
B JTable Selektion von Zellen AWT, Swing, JavaFX & SWT 3
GianaSisters Swing JTable Zellen intelligenter Zeilenumbruch AWT, Swing, JavaFX & SWT 4
K Swing JTable Editierfunktion für einzelne Zellen ausschalten AWT, Swing, JavaFX & SWT 3
X JTable Zellen nicht editierbar AWT, Swing, JavaFX & SWT 5
S Swing JTable - Editierung von Zellen abfangen AWT, Swing, JavaFX & SWT 3
GianaSisters Swing jTable (bestimmte Zellen umrahmen) AWT, Swing, JavaFX & SWT 8
T JTable Zellen Farbe AWT, Swing, JavaFX & SWT 13
N Swing JTable: Zellen verbinden AWT, Swing, JavaFX & SWT 11
N Zellen einer JTable unterschiedlich formatieren AWT, Swing, JavaFX & SWT 7
D Swing JTable, Zellen-Farbe über Koordinaten ändern AWT, Swing, JavaFX & SWT 9
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
D Swing JTable Problem bei automatischem update von Zellen AWT, Swing, JavaFX & SWT 3
G JTable Multiple Row Header Example - Probleme mit der Höhe der Zellen AWT, Swing, JavaFX & SWT 4
C Swing JTable: Horizontale Linie bei einzelnen Zellen ausblenden AWT, Swing, JavaFX & SWT 5
C JTable: Alle selektierten Zellen abfangen AWT, Swing, JavaFX & SWT 13
V Nur zulässige Zeichen in JTable-Zellen eintragen können AWT, Swing, JavaFX & SWT 2
F Text Vertical in Zellen von JTable AWT, Swing, JavaFX & SWT 3
B Swing Drag&Drop einzelner Zellen in einer JTable AWT, Swing, JavaFX & SWT 12
S Swing JTable Auswahl mehrerer Zellen mit STRG+Maus AWT, Swing, JavaFX & SWT 3
A Flexible JTable mit editierbaren Zellen,abhängig von Data AWT, Swing, JavaFX & SWT 2
C JTable und farbige Zellen AWT, Swing, JavaFX & SWT 5
R JTable: Zellen einer Spalte unterschiedlich befüllen AWT, Swing, JavaFX & SWT 2
R JTable: Zellen einer Zeile zusammenfassen? AWT, Swing, JavaFX & SWT 3
R JTable darstellen von leeren Zellen AWT, Swing, JavaFX & SWT 12
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
R JTable updatePaint() angabe der geänderten Zellen AWT, Swing, JavaFX & SWT 3
R JTable mehrere Zellen mit Shift selektieren AWT, Swing, JavaFX & SWT 2
R JTable einzelne Zellen selektieren AWT, Swing, JavaFX & SWT 7
R JTable - Rendern der einzelnen Zellen AWT, Swing, JavaFX & SWT 3
X in JTable nur einige Zellen editierbar machen AWT, Swing, JavaFX & SWT 2
G JTable: Spalten & Zellen fixieren wie in Excel AWT, Swing, JavaFX & SWT 4
G JTable Zellen makieren AWT, Swing, JavaFX & SWT 2
M JTable Zelle ändern -> andere Zellen mit ändern AWT, Swing, JavaFX & SWT 5
J JTable Zellen und Header AWT, Swing, JavaFX & SWT 2
A Zellen in JTable auf Klick kurz markieren auf Klick AWT, Swing, JavaFX & SWT 2
E JTable; DefaultTableCellRenderer. Zellen farbig befüllen. AWT, Swing, JavaFX & SWT 5
E JTable-während der Einfügezeit der Zellen in die Table AWT, Swing, JavaFX & SWT 2
H JTable Text aus mehreren Zellen in einer Spalte kopieren? AWT, Swing, JavaFX & SWT 3
M [Swing] Kalender mit JTable / Einfärben von Zellen AWT, Swing, JavaFX & SWT 10
A JTable, mehrere Zellen markieren AWT, Swing, JavaFX & SWT 3
L Again: In JTable bestimmte Zellen färben AWT, Swing, JavaFX & SWT 12
M CellEditor für individuelle Zellen in JTable AWT, Swing, JavaFX & SWT 3
G JTable(Zellen) und JPanel AWT, Swing, JavaFX & SWT 2
D Im JTable bei einzelnen Zellen die Farbe ändern AWT, Swing, JavaFX & SWT 3
G Rowspan (Zellen verbinden) in JTable? AWT, Swing, JavaFX & SWT 3
R JTable Zellen markieren AWT, Swing, JavaFX & SWT 3
R JTable, automatischer resize der Zellen nach einer Eingabe AWT, Swing, JavaFX & SWT 4
T JTable, Zeilenumbruch in Zellen AWT, Swing, JavaFX & SWT 23
I einzelne Zellen bei JTable markieren AWT, Swing, JavaFX & SWT 3
M JTable und Farbe von Zellen AWT, Swing, JavaFX & SWT 2
N JTable - Problem mit markieren von Zellen AWT, Swing, JavaFX & SWT 3
B JTable-Zellen einfärben AWT, Swing, JavaFX & SWT 6
W JTable Zellen verbinden AWT, Swing, JavaFX & SWT 2
S JTable Zellen ändern AWT, Swing, JavaFX & SWT 3
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
I JavaFX Zellen in Tableview editieren AWT, Swing, JavaFX & SWT 0
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
J Tableview - kann man mit Enter die Zellen wechseln AWT, Swing, JavaFX & SWT 1
S JavaFX GridPane Zellen Seitenverhätnis passend ändern mit der Stage AWT, Swing, JavaFX & SWT 0
E JavaFX TableView mit Zeilenumbruch in Zellen AWT, Swing, JavaFX & SWT 5
L Swing CellRenderer für einzelne Zellen? AWT, Swing, JavaFX & SWT 5
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
J Zellen in JavaFx einfärben funktioniert nicht AWT, Swing, JavaFX & SWT 1
D Swing Mit TableCellRenderer einzelne Zellen markieren AWT, Swing, JavaFX & SWT 3
J CellEditorListener wird für ALLE Zellen ausgeführt AWT, Swing, JavaFX & SWT 2
K Swing CellEditor für einzelne Zellen AWT, Swing, JavaFX & SWT 2
E Swing zellen fixen AWT, Swing, JavaFX & SWT 7
C [SWT] Widget Table verliert nach Sortierung farbige / eingefärbter Background / Zellen AWT, Swing, JavaFX & SWT 3
C GridBagLayout Zellen verbinden AWT, Swing, JavaFX & SWT 13
C Spielfeld Gitter - Einzelne Zellen verändern AWT, Swing, JavaFX & SWT 18
J CellRenderer einzelne zellen Hintergrund AWT, Swing, JavaFX & SWT 9
S Übernehmen von Inhalten aus Zellen in JTables ohne Return AWT, Swing, JavaFX & SWT 7
G nicht editierbare Zellen AWT, Swing, JavaFX & SWT 15
T Zellen editierbar oder nicht AWT, Swing, JavaFX & SWT 6
T JTree: Beschriftung der Zellen AWT, Swing, JavaFX & SWT 3
W Zellen Inhalt beim editieren markieren AWT, Swing, JavaFX & SWT 2
C Zellen editieren AWT, Swing, JavaFX & SWT 4
J JTabel: TableHeader und Zellen Problem AWT, Swing, JavaFX & SWT 2
F Zellen über eine Grafik legen AWT, Swing, JavaFX & SWT 7
J [SWT] alle Zellen in einem Tree einzeln selektieren AWT, Swing, JavaFX & SWT 2
B einzelne Zellen scrollbar machen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 3
J Zellen editieren ausschalten AWT, Swing, JavaFX & SWT 2
D JTree - Größe der Zellen anpassen AWT, Swing, JavaFX & SWT 8
I Swing JTable zeichnet kein vertical Grid 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

Ähnliche Java Themen

Neue Themen


Oben