Tabellen- Daten laden

Diskutiere Tabellen- Daten laden im Java Basics - Anfänger-Themen Bereich.
M

MossMan_AT

Hallo,
ich hätte ein Problem, das das Thema Tabellen- speziell das Laden von Daten, die zuvor gespeichert wurden, betrifft.

Aufgabe ist es einen Frame mit dem Namen "Kontaktliste" zu erstellen, der die Felder Nachname, Vorname, Telefon und Email enthält. Dann sollen die Daten aus diesen Feldern mit einem Button in eine Tabelle übernommen werden, die sich darunter befindet. Das funktioniert auch alles, aber aus irgendeinem Grund werden die Daten nie gespeichert, weshalb es dann beim Laden zu einer Exception kommt. Beim Beenden des Programms über den Button Ende oder über das einfache Schließen werden die Daten in einer Datei "Kontakte.dat" gespeichert. Beim erneuten Öffnen wird überprüft, ob eine solche Datei bereits existiert und falls diese existiert, wird sie geladen, was der Übernahme der Daten in die Tabelle entspricht, aber dies geschieht nicht, da keine Daten gespeichert werden.

Vielen Dank!
Noch einen schönen Abend und liebe Grüße!
Simon

Unten ist der Code zu finden:
Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Kontaktliste extends /*javax.swing.*/JFrame /*implements TableModelListener, ListSelectionListener*/{

    private JPanel contentPane;
    private JTextField tfdNachname;
    private JLabel lblVorname;
    private JTextField tfdVorname;
    private JTextField tfdTele;
    private JLabel lblTele;
    private JLabel lblEmail;
    private JTextField tfdEmail;
    private JLabel lblKontaktliste;
    private JScrollPane scrollPane;
    private JTable table;
    private TableModel tableModel;
    private String dateiname;
    private File datei;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Kontaktliste frame = new Kontaktliste();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Kontaktliste() {
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e)
            {
                try(var out = new BufferedWriter(new FileWriter(dateiname)))
                {
                    //Zeilen- und Spaltenzahl schreiben:
                    var model = (DefaultTableModel)table.getModel();
                    var zeilenzahl = String.valueOf(model.getRowCount());
                    out.write(zeilenzahl);
                    out.newLine();
                    var spaltenzahl = String.valueOf(model.getColumnCount());
                    out.write(spaltenzahl);
                    out.newLine();
                    
                    for(var i = 0; i < (model.getRowCount()); i++)
                    {
                        for(var j = 0; j < (model.getColumnCount()); j++)
                        {
                            if(model.getValueAt(i, j) != null)
                            {
                                var eintrag = model.getValueAt(i,  j).toString();
                                out.write(eintrag);
                            }
                            else
                            {
                                out.write("");
                            }
                            out.newLine();
                        }
                    }
                    System.exit(0);
                }
                catch(Exception e1)
                {
                    e1.printStackTrace();
                }
            }
        });
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        //title:
        setTitle("Kontakttabelle");
        
        //components:
        JLabel lblNachname = new JLabel("Nachname");
        lblNachname.setBounds(10, 11, 86, 14);
        contentPane.add(lblNachname);
        
        tfdNachname = new JTextField();
        tfdNachname.setBounds(10, 36, 86, 20);
        contentPane.add(tfdNachname);
        tfdNachname.setColumns(10);
        
        lblVorname = new JLabel("Vorname");
        lblVorname.setBounds(106, 11, 86, 14);
        contentPane.add(lblVorname);
        
        tfdVorname = new JTextField();
        tfdVorname.setText("");
        tfdVorname.setBounds(106, 36, 86, 20);
        contentPane.add(tfdVorname);
        tfdVorname.setColumns(10);
        
        tfdTele = new JTextField();
        tfdTele.setBounds(202, 36, 128, 20);
        contentPane.add(tfdTele);
        tfdTele.setColumns(10);
        
        lblTele = new JLabel("Telefonnummer");
        lblTele.setBounds(202, 11, 128, 14);
        contentPane.add(lblTele);
        
        lblEmail = new JLabel("Email");
        lblEmail.setBounds(10, 67, 46, 14);
        contentPane.add(lblEmail);
        
        tfdEmail = new JTextField();
        tfdEmail.setBounds(10, 92, 199, 20);
        contentPane.add(tfdEmail);
        tfdEmail.setColumns(10);
        
        JButton btnÜbernehmen = new JButton("Übernehmen");
        btnÜbernehmen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                //Holen der Daten:
                String nachname =tfdNachname.getText();
                String vorname = tfdVorname.getText();
                String telefon = tfdTele.getText();
                String email = tfdEmail.getText();
                
                //Hinzufügen einer neuen Zeile und Übergeben der Daten:
                var model = (DefaultTableModel)table.getModel();
                model.addRow(new String[] {nachname, vorname, telefon, email});
            }
        });
        btnÜbernehmen.setBounds(219, 91, 111, 23);
        contentPane.add(btnÜbernehmen);
        
        //JTable:
        lblKontaktliste = new JLabel("Kontaktliste:");
        lblKontaktliste.setBounds(10, 123, 86, 14);
        contentPane.add(lblKontaktliste);
        
        scrollPane = new JScrollPane();
        scrollPane.setBounds(10, 148, 414, 67);
        contentPane.add(scrollPane);
        
        table = new JTable();
        scrollPane.setViewportView(table);
        
        tableModel = new DefaultTableModel(new String[][] {}, new String[] {"Nachname", "Vorname", "Telefon", "Email"});
        table.setModel(tableModel);
        
        JButton btnLöschen = new JButton("Markierte Zeile löschen");
        btnLöschen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                if((table.getSelectedRow()) >= 0)
                {
                    var model = (DefaultTableModel)table.getModel();
                    model.removeRow(table.getSelectedRow());
                }
            }
        });
        btnLöschen.setBounds(10, 226, 199, 23);
        contentPane.add(btnLöschen);
        
        JButton btnEnde = new JButton("Ende");
        btnEnde.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                try(var out = new BufferedWriter(new FileWriter(dateiname)))
                {
                    //Zeilen- und Spaltenzahl schreiben:
                    var model = (DefaultTableModel)table.getModel();
                    var zeilenzahl = String.valueOf(model.getRowCount());
                    out.write(zeilenzahl);
                    out.newLine();
                    var spaltenzahl = String.valueOf(model.getColumnCount());
                    out.write(spaltenzahl);
                    out.newLine();
                    
                    for(var i = 0; i < (model.getRowCount()); i++)
                    {
                        for(var j = 0; j < (model.getColumnCount()); j++)
                        {
                            if(model.getValueAt(i, j) != null)
                            {
                                var eintrag = model.getValueAt(i,  j).toString();
                                out.write(eintrag);
                            }
                            else
                            {
                                out.write("");
                            }
                            out.newLine();
                        }
                    }
                    System.exit(0);
                }
                catch(Exception e1)
                {
                    e1.printStackTrace();
                }
            }
        });
        btnEnde.setBounds(335, 226, 89, 23);
        contentPane.add(btnEnde);
        
        //Datei laden:
        dateiname = "." + File.separator + "Kontaktdaten.dat";
        datei = new File(dateiname);
        
        
        if(!datei.exists())
        {
            try
            {
                datei.createNewFile();
            }
            catch(Exception e2)
            {
                e2.printStackTrace();
            }
        }
        else
        {
            try(var in = new BufferedReader(new FileReader(dateiname)))
            {
                //Zeilen- und Spaltenzahl lesen:
                var zeilenzahl = Integer.parseInt(in.readLine());
                var spaltenzahl = Integer.parseInt(in.readLine());
                var model = (DefaultTableModel)table.getModel();
                
                for(var i = 0; i < zeilenzahl; i++)
                {
                    model.addRow(new String[] {});
                    for(var j = 0; j < spaltenzahl; j++)
                    {
                        var eintrag = in.readLine();
                        model.setValueAt(eintrag, i, j);
                    }
                }
            }
            catch(IOException ex)
            {
                ex.printStackTrace();
            }
        }
    }
}
 
O

Oneixee5

Du kannst das System.exit(0); raus nehmen. Wenn du das unbedingt haben musst, dann mach es in einen finally-Block nach dem Speichern.
 
M

MossMan_AT

Ok, vielen Dank!

Liebe Grüße und noch einen schönen Abend!
Simon
 
Thema: 

Tabellen- Daten laden

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben