Java - JTextField

Hi ich komme damit nicht zurecht

Was ich gemacht habe war das ich 4 globale Variablen JTextField erstellt habe.
Die belege ich dann bei jedem Aufruf von initGUI() mit einem "new TextField(30)"

Dann wenn ein Button gedrückt wird, füge ich die Daten mit zb
jt1.getText() im Button Event die Informationen ein

Das klappt auch bei jedem erstenmal, jedoch beim 2. 3. etc mal spuckt er einen Exception auf den ich dann dort immer auffange, Wieso? und wie mache ich das besser?

EDIT: Bzw ich denke das Problem liegt dort, dass ich das zweite mal dem Programm nicht klar mache das es eine neue Angabe im Textfeld geben soll, aber WIE mache ich das ist also meine Frage.

Der Code der Klasse:
Code:
public class MedienbestandUI extends JFrame implements ActionListener
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    Medienbestand _medienbestand;
    int _anzMedien;
    String s1 = new String();
    
    JTextField jt1, jt2, jt3, jt4;
    /*
     * Der Konstruktor mit dem aktuellem Medienbestand
     * als Parameter
     * @param medienbestand
     * Der aktuelle Bestand
     */
    public MedienbestandUI(Medienbestand medienbestand)
    {
        super("Neues Medium hinzufügen");
        _medienbestand = medienbestand;
        _anzMedien = _medienbestand.gibMedien().size();
        
        initGUI();
    }
    /*
     * Ist für den Grafischen Teil zuständig
     */
    private void initGUI()
    {
        jt1 = new JTextField(30);
        jt2 = new JTextField(30);
        jt3 = new JTextField(30);
        jt4 = new JTextField(30);
        
        JPanel jp = new JPanel();
        JPanel jpB = new JPanel();
        JPanel jpG = new JPanel();
        JPanel jpList = new JPanel();
        
        JButton jb1 = new JButton("Hinzufügen");
        jb1.addActionListener(this);
        
        JButton jb2 = new JButton("Entferne letzten Eintrag");
        jb2.addActionListener(this);
        
        JButton jb3 = new JButton("Abbrechen");
        jb3.addActionListener(this);
        
        jp.setLayout(new GridLayout(4, 2));
        jpB.setLayout(new BorderLayout());
        jpG.setLayout(new GridLayout(3, 1));
        jpList.setLayout(new GridLayout(_anzMedien, 2));
        
        
        for(int i = 0;i < _anzMedien;i++)
        {
            jpList.add(new JLabel(_medienbestand.gibMedien().get(i).
                    gibTitel()));
            jpList.add(new JLabel(_medienbestand.gibMedien().get(i).
                    gibMedienBezeichnung()));
        }
        
        jp.add(new JLabel("Name"));
        jp.add(jt1);
        jp.add(new JLabel("Kommentar"));
        jp.add(jt2);
        jp.add(new JLabel("Interpret"));
        jp.add(jt3);
        jp.add(new JLabel("Spiellänge"));
        jp.add(jt4);
        
        jpG.add(jb1);
        jpG.add(jb2);
        jpG.add(jb3);
        
        getContentPane().add(BorderLayout.EAST,
                jpG);
        jpB.add(BorderLayout.SOUTH,
                jpList);
        
        getContentPane().add(BorderLayout.NORTH,
                new JLabel("Erstelle neue CD"));
        getContentPane().add(BorderLayout.CENTER,
                jp);
        getContentPane().add(BorderLayout.SOUTH,
                jpB);
        
        pack();
    }
    
    @Override
    public void actionPerformed(ActionEvent arg0) // hätte auch mit new...
    {
        JButton jb = (JButton) arg0.getSource();
        
        if(jb.getText().equals("Hinzufügen"))
        {
            try
            {
                System.out.println(jt1.getText());
                System.out.println(jt2.getText());
                System.out.println(jt3.getText());
                System.out.println(jt4.getText());
                _medienbestand.fuegeMediumEin(
                        new CD(jt1.getText(),
                                jt2.getText(),
                                jt3.getText(),
                                Integer.parseInt(jt4.getText())));
                _anzMedien = _medienbestand.gibMedien().size();
                
                initGUI();
            }
            catch(NumberFormatException e)
            {
                this.setTitle("Falsches Format");
            }
        }
        if(jb.getText().equals("Entferne letzten Eintrag"))
        {
            _medienbestand.entferneMedium(_medienbestand.gibMedien()
                    .get(_medienbestand.gibMedien().size() - 1));
            _anzMedien = _medienbestand.gibMedien().size();
            initGUI();
        }
        if(jb.getText().equals("Abbrechen"))
        {
            this.dispose();
        }
    }
}
Bin jez schon dankbar
 
Welche Exception meinst du eigentlich? Schau dir doch den Stacktrace an bzw. zeig uns den Stacktrace.
Ich hab zwar schon ewig nix mehr mit Swing gemacht, aber jedesmal das ganze JFrame neu aufbauen nur weil eine Eingabe gemacht wurde ist glaub ich etwas suboptimal.

odigo
 
Der Exception ist der welcher unten abgefangen wird, also NumberFormatException das hat wie ich gemerkt habe den Grund das die Textfelder alle Leer sind!
Das heißt jedoch immer noch ich weis net wieso


EDIT:
OMG ich habs geschafft, nach 5 Stunden ( lerns noch ) ich danke trotzdem fürs ansehen. Wens interressiert, ich musste n Label umschreiben.
 
Na aus NULL wird niemals eine anständige Zahl werden.
Also wenn jt4.getText() leer ist (NULL) wird die Exception bei Integer.parseInt(jt4.getText()) geworfen. Du musst also erst auf NULL prüfen bevor versuchst daraus ein Integer zu machen. Klingt doch logisch oder?

odigo
 
Zurück
Oben