G
Guest
Gast
Ich will die einzelnen Zellen in JTable alphabetisch anordnen
wie geht das??
wie geht das??
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);
}
}
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);
}
}
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"
P3AC3MAK3R hat gesagt.:Titel präzisiert.