Abbrechen muss immer einmal mehr gedrückt werden

Jinairu

Mitglied
Moin Moin, ich habe einen Fehler in dem untenstehenden Interface.
Das Problem ist, an sich funktioniert das so, wie ich es mir vorstelle.
Es ist ein Programm um Zinsen eines Kredites zu berechnen.
Zuerst wird ausgewählt, was übergeben wird, z.B. Gesamtaufnahme, Zinssatz und die Laufzeit.
Danach kann werden die einzelnen Buttons zu eingabe Buttons und es öffnet sich ein InputDialog.
Danach wird mit ParseInt geprüft, ob nur Zahlen eingegeben wurden und zuletzt wird die zahl zurückgegeben um mit ihr zu arbeiten.
Problem ist, es wird jedes mal einmal mehr das Fenster zur Eingabe aufgerufen.
Ob ich abbrechen drücke oder eine Zahl eingebe ist dabei egal.
Ich habe auch schon mit verschiedenen ActionListenern gearbeitet, hab aber trotzdem nicht geholfen.

Kann mir jemand sagen, wo genau der Fehler liegt? Von dem mir gegebenen Verständnis her, müsste doch der ActionListener bzw das ActionEvent nur einmal aufgerufen werden.
Gibt es dazu eine passende methode um den irgendwie zu "resetten" oder das sonstwie zu verhindern?

Java:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
 
public class UIKern {
 
    private JFrame frame = new JFrame();
    private JPanel panel = new JPanel();
    private JButton button1 = new JButton();
    private JButton button2 = new JButton();
    private JButton button3 = new JButton();
    private JButton referenz = new JButton();
    private ActionListener action = new ActionListener() {
 
        @Override
        public void actionPerformed(ActionEvent arg0) {
            ((JButton) arg0.getSource()).setEnabled(false);
            referenz = ((JButton) arg0.getSource());
            eingabe();
        }
    };
 
    void start() {
        frame.setSize(600, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.setSize(600, 400);
        panel.setLayout(null);
        panel.setBackground(Color.BLUE);
        ersteAuswahl();
        frame.add(panel);
        frame.setVisible(true);
    }
 
    void buttonAnzeigen() {
        button1.setBounds(50, 50, 100, 20);
        button1.addActionListener(action);
        button2.setBounds(50, 80, 100, 20);
        button2.addActionListener(action);
        button3.setBounds(50, 110, 100, 20);
        button3.addActionListener(action);
        panel.add(button1);
        panel.add(button2);
        panel.add(button3);
    }
 
    float eingabe() {
        float floatTemp = 0;
        String stringTemp;
        while (true) {
            stringTemp = JOptionPane.showInputDialog("Bitte nur Zahlen eingeben:");
            if (stringTemp == null) {
                referenz.setEnabled(true);
                break;
            } else {
                try {
                    floatTemp = Float.parseFloat(stringTemp);
                    break;
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, "Nur Zahlen eingeben", "Fehler!", JOptionPane.OK_CANCEL_OPTION);
                }
            }
        }
        return floatTemp;
    }
 
    void ersteAuswahl() {
        button1.setBounds(200, 50, 200, 30);
        button1.setText("Kapital, Zinsen, Laufzeit");
        button1.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent arg0) {
                panel.removeAll();
                button1.setText("Kapital");
                button2.setText("Zinsen");
                button3.setText("Laufzeit");
                buttonAnzeigen();
                panel.repaint();
            }
        });
        button2.setBounds(200, 90, 200, 30);
        button2.setText("Kapital, Zinssatz, Dauer");
        button2.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent arg0) {
                panel.removeAll();
                button1.setText("Kapital");
                button2.setText("Zinssatz");
                button3.setText("Laufzeit");
                buttonAnzeigen();
                panel.repaint();
            }
        });
        button3.setBounds(200, 130, 200, 30);
        button3.setText("Zinsen, Zinssatz, Laufzeit");
        button3.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent arg0) {
                panel.removeAll();
                button1.setText("Zinsen");
                button2.setText("Zinssatz");
                button3.setText("Laufzeit");
                buttonAnzeigen();
                panel.repaint();
            }
        });
        panel.add(button1);
        panel.add(button2);
        panel.add(button3);
 
    }
}

Vielen Dank und das UI ist nicht immer so spärlich^^ habs nur reduzieren wollen zum fehlersuchen :p

lg, Jin
 
S

SlaterB

Gast
du bist zu sparsam, du verwendest die Button mehrfach,

wenn die erste Wahl getroffen wird und Kapital/ Zinsen/ Laufzeit ansteht, dann sind die Listener aus ersteAuswahl() immer noch aktiv,
neben Eingabe wird wieder eine Auswahl der Eingabe getroffen, die Beschriftungen der Button können sich ändern,
Code:
buttonAnzeigen();
wird bald mehrfach ausgeführt, entsprechend viele Listener sammeln sich an,
immer derselbe, aber man kann ihn mehrfach registrieren, wird mehrfach ausgeführt

wenn du vorherige Listener mit
Code:
buttonX.removeActionListener(buttonX.getActionListeners()[0]);
entfernst kann das letzlich noch gut gehen, schön ist das aber nicht,

unterscheide doch wenigstens zwischen den drei am Anfang + drei zur Eingabe,
für letztere drei die Initialisierung von setBounds() und addActionListener() nur einmal am Anfang,

Text zu ändern und zum Panel hinzufügen ist weniger gefährlich,
(setBounds() macht auch keine Probleme, aber einmal reicht völlig)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JOptionPane return bei "Abbrechen" AWT, Swing, JavaFX & SWT 13
emma_louisa JavaFX MenuBar Zweitfenster; bei Button "Abbrechen" nur das Zweitfenster schließen AWT, Swing, JavaFX & SWT 2
Neumi5694 Swing Listenauswahl abbrechen AWT, Swing, JavaFX & SWT 0
D Robot Programm mit Escape abbrechen (aus Eclipse heraus) AWT, Swing, JavaFX & SWT 2
C Swing SwingWorker abbrechen AWT, Swing, JavaFX & SWT 12
VfL_Freak Swing kann ich einen laufenden Timer mitten in der Ausführung abbrechen? AWT, Swing, JavaFX & SWT 6
S Berechnung abbrechen mit Button AWT, Swing, JavaFX & SWT 6
M JOptionPane.showInputDialog abbrechen abfangen? AWT, Swing, JavaFX & SWT 2
M Swing WindowListener -> Event abbrechen? AWT, Swing, JavaFX & SWT 2
O nimbus Abbrechen ok vertauscht AWT, Swing, JavaFX & SWT 2
T JColorChooser abbrechen... AWT, Swing, JavaFX & SWT 2
T Abbrechen-Icon entfernen AWT, Swing, JavaFX & SWT 4
K Editieren abbrechen AWT, Swing, JavaFX & SWT 11
S Methode während ihrer Laufzeit abbrechen AWT, Swing, JavaFX & SWT 6
H Auswahl in JComboBox abbrechen AWT, Swing, JavaFX & SWT 5
M Schleife mit Button abbrechen AWT, Swing, JavaFX & SWT 4
oliver1974 JTable Editierprozess abbrechen AWT, Swing, JavaFX & SWT 2
C JFileChooser - dispose() - Fenster schließ. Abbrechen Button AWT, Swing, JavaFX & SWT 6
H WindowClosing Event abbrechen AWT, Swing, JavaFX & SWT 2
N Beenden-Dialog mit "Beenden" und "Abbrechen&q AWT, Swing, JavaFX & SWT 2
L JOP.showInputDialog: Abbrechen Button-Funktion beenden AWT, Swing, JavaFX & SWT 5
M Muss man die ObservableList aktualisieren? AWT, Swing, JavaFX & SWT 3
I JAVA 8, JAVAFX und Eclipse – muss Eclipse extra eingerichtet werden? AWT, Swing, JavaFX & SWT 9
A Event Handling Muss ich 'KeyListener' tasuend mal zufügen? AWT, Swing, JavaFX & SWT 7
M GUI muss updaten und neuzeichnen AWT, Swing, JavaFX & SWT 3
J Anonyme Klasse - Button ansprechen - Warum muss Button final sein? AWT, Swing, JavaFX & SWT 4
B Swing Passendes Layout finden: Welche Klassen muss ich wie anwenden? AWT, Swing, JavaFX & SWT 8
B JProgressBar: wie muss ich das lösen? AWT, Swing, JavaFX & SWT 4
0 Thread der im EDT ausgeführt werden muss - GUI blockieren AWT, Swing, JavaFX & SWT 5
M muss JFrame jedesmal neu aufgebaut werden? AWT, Swing, JavaFX & SWT 4
K welches package muss ich angeben um GUIs zu erstellen? AWT, Swing, JavaFX & SWT 5
D JDialog muss man immer öfters schliessen AWT, Swing, JavaFX & SWT 3
Hatsi09 Javafx MediaPlayer spielt nicht immer AWT, Swing, JavaFX & SWT 3
T Swing Tooltip-Delay funktioniert nicht immer. AWT, Swing, JavaFX & SWT 1
J JOptionPane ruft sich selbst immer wieder neu auf AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
M UI immer lesbar, egal welche Auflösung AWT, Swing, JavaFX & SWT 7
N SceneBuilder wie auf Attribute zugreifen? Diese sind immer null. AWT, Swing, JavaFX & SWT 6
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JavaFX Linie immer in der Mitte der Szene halten AWT, Swing, JavaFX & SWT 12
M Java FX Immer aktuelle Mausposition anzeigen AWT, Swing, JavaFX & SWT 6
Tom299 JavaFX Default-Cursor läßt sich nicht immer "aktivieren" AWT, Swing, JavaFX & SWT 3
Z JComponent's requestFocus() - Wieso nicht immer anwendbar? AWT, Swing, JavaFX & SWT 1
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
C JTextPane scrollt mit setText() immer nach oben AWT, Swing, JavaFX & SWT 2
B JFrame immer an gleicher stelle auf anderem Frame AWT, Swing, JavaFX & SWT 5
U Fenster beim Vergörßern immer quadratsich AWT, Swing, JavaFX & SWT 7
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
V Buttons sehen immer "active" aus AWT, Swing, JavaFX & SWT 6
M SWT CCombo immer so groß wie der größte Wert! AWT, Swing, JavaFX & SWT 0
MaDDin-94 Swing Listener reagiert nicht immer AWT, Swing, JavaFX & SWT 2
M Key-,... Listener funktioniert nicht immer AWT, Swing, JavaFX & SWT 2
D Letzter Button füllt immer ganzes Fenster AWT, Swing, JavaFX & SWT 5
L View aus dem MVC ist immer die GUI? AWT, Swing, JavaFX & SWT 5
C JTable Datensätze bleiben immer gleich AWT, Swing, JavaFX & SWT 14
K 2D-Grafik interstectsLine gibt immer false zurück AWT, Swing, JavaFX & SWT 18
D JDialog: immer nur einer gleichzeitig AWT, Swing, JavaFX & SWT 4
M Fenster mit ProgressMonitor immer leer AWT, Swing, JavaFX & SWT 23
I Fenster immer im Vordergrund AWT, Swing, JavaFX & SWT 14
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
D JTree node reagiert bei Klick nicht immer AWT, Swing, JavaFX & SWT 2
B JScrollPane scrollt nicht immer automatisch AWT, Swing, JavaFX & SWT 2
C SWT Combo getSelectionIndex() immer -1? AWT, Swing, JavaFX & SWT 10
S Canvas in ScrollPane wird beim scrollen immer neu gezeichnet AWT, Swing, JavaFX & SWT 3
W 2D-Grafik Koordinaten nicht immer die selben AWT, Swing, JavaFX & SWT 9
D Swing PopupMenu immer an gewünschte Position? AWT, Swing, JavaFX & SWT 2
A BufferedImage nach dem Speichern immer schwarz AWT, Swing, JavaFX & SWT 8
C TextArea Ausgabe immer ganz oben AWT, Swing, JavaFX & SWT 3
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
O Immer Exception in AWT-EventQueue-0 AWT, Swing, JavaFX & SWT 5
F AWT MouseMotionListener e.getButton() ist immer 0 unter Linux und Windows AWT, Swing, JavaFX & SWT 6
N JTable, Zeile bleibt immer selektiert.... AWT, Swing, JavaFX & SWT 3
A Swing JFrame vergrößert sich immer bei setText() eines Labels AWT, Swing, JavaFX & SWT 3
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
M WindowEvent löst immer PropertyChangeListener aus AWT, Swing, JavaFX & SWT 9
F Spalten in JTable immer am rechten Tabellenrand AWT, Swing, JavaFX & SWT 3
2 Werde Java GUIs immer noch mit dem in die Jahre gekommen Swing gemacht? AWT, Swing, JavaFX & SWT 12
S JFreeChart Achse immer sichtbar AWT, Swing, JavaFX & SWT 2
C AWT dispose() erzeugt nicht immer formfeed AWT, Swing, JavaFX & SWT 2
R Swing JDialog liefert immer false, 2 JListen verknüpfen AWT, Swing, JavaFX & SWT 3
B Swing: letztes Element wird immer auf Fenstergröße gezogen AWT, Swing, JavaFX & SWT 3
B Swing JTable getSelectedRow() liefert immer -1 AWT, Swing, JavaFX & SWT 6
A Größe eines JFrames immer nur quadratisch AWT, Swing, JavaFX & SWT 8
aze getX ,getY immer 0 AWT, Swing, JavaFX & SWT 9
R JTable immer nur die letzte Spalte markiert.... AWT, Swing, JavaFX & SWT 4
ABstraCT JTabbedPane - click wird nicht immer ausgeführt ! AWT, Swing, JavaFX & SWT 10
aze JDialog immer so breit ,dass die Überschrift sichtbar ist AWT, Swing, JavaFX & SWT 6
S Listener der mich informiert wann immer einer Liste ein Element hinzugefuegt wird? AWT, Swing, JavaFX & SWT 4
multiholle Swing Mouselistener auf Parentpanel immer aktiv AWT, Swing, JavaFX & SWT 7
hdi Swing JLabel - Grösse passt sich immer Text an AWT, Swing, JavaFX & SWT 17
P JButtons haben nicht immer lust zu erscheinen AWT, Swing, JavaFX & SWT 9
R JScrollBar - Immer drei Zeilen weiter AWT, Swing, JavaFX & SWT 10
N JLabel immer zentriert AWT, Swing, JavaFX & SWT 2
S JDialog startet immer wieder neu AWT, Swing, JavaFX & SWT 2
G Value vom TreeCellEditor ist immer null AWT, Swing, JavaFX & SWT 3
M GridBagLayout - Position immer zentriert AWT, Swing, JavaFX & SWT 5
A Scrollbalken von JScrollPane immer anzeigen AWT, Swing, JavaFX & SWT 2
GilbertGrape JTable - immer leere Zeile AWT, Swing, JavaFX & SWT 6
K Textfelder auslesen gibt immer Fehler AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben