Hi,
Ich versuche gerade mir ein TableRowSorter für double Werte mit der deutchen Formatierung #,##0.00 zu basteln. Ich habe dafür eine Testklasse geschrieben, die absteigende Sortierung scheint es zu funktionieren, nur die aufsteigende nicht. Hat jemand eine Idee?
Ich versuche gerade mir ein TableRowSorter für double Werte mit der deutchen Formatierung #,##0.00 zu basteln. Ich habe dafür eine Testklasse geschrieben, die absteigende Sortierung scheint es zu funktionieren, nur die aufsteigende nicht. Hat jemand eine Idee?
Java:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package dienstimport;
import java.awt.Container;
import java.awt.FlowLayout;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.Comparator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
/**
* Diese Klasse erstellt ein GUI mit einer Tabelle darin. Die Tabelle enthält
* Double-Werte und diese sollen sortiert werden können.
*/
public class DoubleTableGui extends JFrame {
private static final long serialVersionUID = 1L;
/**
* Tabelle, die die Datums-Werte auflistet
*/
private JTable doubleTable = null;
private DecimalFormat df = new DecimalFormat("#,##0.00");
/**
* Erstellt das GUI.
*/
public DoubleTableGui() {
Container cp = this.getContentPane();
cp.setLayout(new FlowLayout());
// Die Tabelle für die Double-Werte initialisieren.
getDoubleTable();
JScrollPane sp = new JScrollPane(doubleTable);
cp.add(sp);
this.pack();
this.setVisible(true);
}
public JTable getDoubleTable() {
// Prüfen, ob das DatumsTabellen-Objekt bereits initialisiert worden ist
if(doubleTable == null) {
// Neue Tabelle erstellen
doubleTable = new JTable();
// TableModel erstellen und mit Werten füllen
DefaultTableModel model = new DefaultTableModel(new String[][]{},
new String[]{"Doublewert"});
model.addRow(new String[]{"2.001,23"});
model.addRow(new String[]{"1,99"});
model.addRow(new String[]{"99,99"});
model.addRow(new String[]{"5.300,20"});
// TableRowSorter erstellen und ein neues Comparator-Objekt
// implementieren, um die DoubleWerte zu vergleichen
TableRowSorter<TableModel> rowSorter = new TableRowSorter<TableModel>(
model);
rowSorter.setComparator(0, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
try {
Number d1 = df.parse(o1);
Number d2 = df.parse(o2);
if(d1.doubleValue() < d2.doubleValue()){
return d1.doubleValue() < d2.doubleValue() ? -1 : 1;
}
return 0;
} catch (ParseException ex) {
ex.printStackTrace();
Logger.getLogger(DoubleTableGui.class.getName()).log(Level.SEVERE, null, ex);
return 0;
}
}
});
// Das TableModel in die Tabelle einsetzen
doubleTable.setModel(model);
// Den TableRowSorter in die Tabelle einsetzen
doubleTable.setRowSorter(rowSorter);
}
return doubleTable;
}
public static void main(String[] args) {
new DoubleTableGui().setVisible(true);
}
}