Wie kann man in einer JList sortieren?

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

HonniCilest

Erfahrenes Mitglied
Sorry wenn ich das so sage, aber das sieht wie zusammenkopiert und nicht verstanden aus ;-)
Java:
int value = Integer.parseInt(br.readLine());
Soll vermutlich die Anzahl der folgenden Einträge sein. Grundsätzlich ok. Du brauchst die while-Schleife nicht mehr. Dann ist aber text deine komplette Zeile. Das muss dir klar sein. Deine Hürde ist dann die einzelnen Werte aus der Zeile zu lesen und zu parsen. Die interpretierten Werte gibst du dann der Entity.
 

Nico2201

Mitglied
Sorry wenn ich das so sage, aber das sieht wie zusammenkopiert und nicht verstanden aus ;-)
Zugegeben: Teilweise ja, aber nicht alles.

Die while-Schleife habe ich entfernt und bin auch verschiedene Varianten beim Parsen durchgegangen, aber ohne Erfolg. Jedes mal kommt folgende Fehlermeldung:

Java:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "e-45.0-4.0"
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)
    at ausgabenrechner.Ausgabenrechner.DateiOeffnen(Ausgabenrechner.java:306)
    at ausgabenrechner.Ausgabenrechner$3.actionPerformed(Ausgabenrechner.java:99)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.AbstractButton.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

Fällt dir vielleicht was ein? Ich bin dabei ziemlich am verzweifeln. :(
 

Nico2201

Mitglied
Ich hoffe, ich habe das richtig verstanden, was du meinst..

Es handelt sich um eine Text-Datei (*.txt):

1
Beispiel-100.0-5072018.0
Ihre Ausgaben: 100.0€

Das Speichern funktioniert einwandfrei, aber das Öffnen ist das Problem. Hier die Fehlermeldung dazu:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "Beispiel-100.0-5072018.0"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at ausgabenrechner.Ausgabenrechner.DateiOeffnen(Ausgabenrechner.java:306)
at ausgabenrechner.Ausgabenrechner$3.actionPerformed(Ausgabenrechner.java:99)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
 

vfl_freak

Premium-User
Moin,
die Fehlermeldung ist doch eindeutig:
java.lang.NumberFormatException: For input string: "Beispiel-100.0-5072018.0"

sie tritt hier auf
at ausgabenrechner.Ausgabenrechner.DateiOeffnen(Ausgabenrechner.java:306)
wobei ich mal auf diese Zeile tippen würde:
int value = Integer.parseInt(br.readLine());

Vermutlich wird hier der o. g. String geparst, aber er enthält eben nun mal keinen Integer!

Du könntest den String "Beispiel-100.0-5072018.0" (so er denn immer gleich aufgebaut ist) ggf. nach dem '-' splitten und die Teile '100.0' und '5072018.0' einzeln in Zahlen umwandeln. Allerdings auch nicht in Integer, da es keine Interger sind und hierbei der Punkt stört
http://javatricks.de/tricks/string-in-int-umwandeln

VG Klaus
 

Nico2201

Mitglied
Du könntest den String "Beispiel-100.0-5072018.0" (so er denn immer gleich aufgebaut ist) ggf. nach dem '-' splitten und die Teile '100.0' und '5072018.0' einzeln in Zahlen umwandeln. Allerdings auch nicht in Integer, da es keine Interger sind und hierbei der Punkt stört

Mit Splitten habe ich bis jetzt nur wenig zu tun gehabt, aber ich habe mich hingesetzt, eine Testmethode geschrieben, um zu sehen wie das ganze funktioniert und dann habe ich diese Methode auf meine "DateiOeffnen"-Methode übertragen und auch dementsprechend angepasst:

Java:
public void DateiOeffnen(ActionEvent e) {
        
        JFileChooser fcOeffnen = new JFileChooser();
        
        if(fcOeffnen.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
            
            File datei = fcOeffnen.getSelectedFile();
            
            try {
                
                br = new BufferedReader(new FileReader(datei));
                int value = Integer.parseInt(br.readLine());
                
                for(int i = 0; i < value; i++) {
                    
                    String[] s = br.readLine().split("-", 3);
                    String name = s[0];
                    String sPreis = s[1];
                    String datum = s[2];
                    double preis = Double.parseDouble(sPreis);
                    model.addElement(new Entity(name, preis, datum));
                }
                
                liste.setModel(model);
                String s = br.readLine();
                ausgabePreis.setText(s);
            }
            
            catch(IOException e1) {
                
                JOptionPane.showMessageDialog(null, "Die Liste konnte nicht geöffnet werden. Bitte versuchen Sie es erneut!", "Öffnen fehlgeschlagen", JOptionPane.WARNING_MESSAGE);
            }
            
            finally {
                
                try {
                    
                    br.close();
                    
                }
                
                catch(IOException e2) {

                    JOptionPane.showMessageDialog(null, "Die Liste konnte nicht geöffnet werden. Bitte versuchen Sie es erneut!", "Öffnen fehlgeschlagen", JOptionPane.WARNING_MESSAGE);
                }
            }
        }
    }

Vielen Dank für eure Hilfe! :)(y)
 

vfl_freak

Premium-User
Moin,
Also ist Datum in deiner Entity ein String?
ja, scheint so, da es ja scheinbar funktioniert!

Noch ein Tipp am Rande:
nimm' immer "sprechende Bezeichner"!!
Sonst fliegt Dir möglicherweise sowas hier
Java:
try 
{
    br = new BufferedReader(new FileReader(datei));
    int value = Integer.parseInt(br.readLine());
    for( int i = 0; i < value; i++ )
    {
        String[] s = br.readLine().split("-", 3);   // 's' lokal als Stringarray !!
        String name = s[0];
        String sPreis = s[1];
        String datum = s[2];
        double preis = Double.parseDouble(sPreis);
        model.addElement(new Entity(name, preis, datum));
    }
    liste.setModel(model);
    String s = br.readLine();    // 's' als String
    ausgabePreis.setText(s);
}
eines Tages garantiert um die Ohren!!
Wird der Code größer, ist unklar was 's' semantisch enthält und ob es nun String oder Stringarray ist!

VG Klaus
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge