Komische Verhaltensweise

Status
Nicht offen für weitere Antworten.

tingel

Mitglied
Hallo,

ich habe folgendes Problem:

Ich habe ein Hauptfenster mit verschiedenen Buttons, die jeweils ein Unterfenster öffnen. In diesen Unterfenstern sind Buttons, Listen, etc. Gehe ich jetzt nach Programmstart zum ersten mal in eines der Unterfenster und führe eine definierte Opration durch drücken eines Buttons aus, erscheint nach Abschluß ein JOptionPane mit einer Meldung ob die Opration geklappt hat oder nicht. Den JOptionPane muss ich mit einem OK-Button bestätigen. Anschließend kehre ich zum Unterfenster zurück. Starte ich das selbe Unterfenster nochmal und führe die gleiche Operation wie oben aus, erscheind der JOptionPane zweimal hintereinander. Das gleiche Phänomen habe ich auch bei dem Knopf, bei dem ich einen Process einen Textedito starte. Hat jemand eine Idee woran das liegen könnte?

Hier einmal ausschnittsweise der Code:
main:
Code:
public class main {
    public main() {
    DLNamesProfessional frame = new DLNamesProfessional();
        // Frames überprüfen, die voreingestellte Größe haben
        // Frames packen, die nutzbare bevorzugte Größeninformationen enthalten, z.B. aus ihrem Layout
        if (packFrame) {
            frame.pack();
        } else {
            frame.validate();
        }

        // Das Fenster zentrieren
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        frame.setLocation((screenSize.width - frameSize.width) / 2,
                          (screenSize.height - frameSize.height) / 2);
        frame.setVisible(true);
        try {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    public static void main(String[] args) {
        if(args.length>0) {
            pathToUserSettings = args[0];
        }
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.
                                             getSystemLookAndFeelClassName());
                } catch (Exception exception) {
                    exception.printStackTrace();
                }

                new main();
            }
        });
    }
}

Bemerkung: Kommt so aus dem JBuilder

Hauptfenster:
Code:
public class DLNamesProfessional extends JFrame {
    [...]
    JButton scanButton = new JButton();
    [...]
    scanButton.addActionListener(new DLNamesProfessional_scanButton_actionAdapter(this));
    [...]
    public void scanButton_actionPerformed(ActionEvent e) {
        DLNamesProfessional_ScanFolderstructureDialog sfd = new DLNamesProfessional_ScanFolderstructureDialog(this);
        // Das Fenster zentrieren
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = sfd.getPreferredSize();
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        sfd.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
        sfd.setModal(true);
        sfd.pack();
        sfd.show();
    }
    [...]

class DLNamesProfessional_scanButton_actionAdapter implements ActionListener {
    private DLNamesProfessional adaptee;
    DLNamesProfessional_scanButton_actionAdapter(DLNamesProfessional adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.scanButton_actionPerformed(e);
    }
}
[...]


Unterfenster:
Code:
public class DLNamesProfessional_ScanFolderstructureDialog extends JDialog implements ActionListener {
    [...]
    JButton runScanButton = new JButton();
    [...]
    runScanButton.addActionListener(new DLNamesProfessional_ScanFolderstructureDialog_RunScanButtonListener());
    [...]   
}

DLNamesProfessional_ScanFolderstructureDialog:
Code:
public class DLNamesProfessional_ScanFolderstructureDialog_RunScanButtonListener implements ActionListener {
    [...]
    public void actionPerformed(ActionEvent e) {
        [...]tu was[...]
        DLNamesProfessional_Info info = new DLNamesProfessional_Info("Scan complete.\nNo naming and numbering errors.");
    }
}

DLNamesProfessional_Info:
Code:
public class DLNamesProfessional_Info {
    //constructor
    DLNamesProfessional_Info(String infoString) {
        Object[] button = {"Ok"};
        int info = JOptionPane.showOptionDialog(
                        null,				//parent window
                        infoString,			//message
                        "Information",			//title
                        0,				//option type
                        JOptionPane.INFORMATION_MESSAGE,//message type
                        null,				//don't use a custom icon
                        button,				//the titles of buttons
                        button[0]);			//default button title
        }
}


Ich Danke schonmal im Voraus für eure Hilfe
 

Ilja

Bekanntes Mitglied
versuche das dialog-unter-fenster zu zerstören, wenn es geschlossen wird mit dispose()
 

Mag1c

Top Contributor
Hi,

es sieht so aus, daß du das gleiche Unterfenster nochmal verwendest (was ja auch kein Problem ist). Nur darfs du beim zweiten Öffnen nich noch einen Listener an den Button hängen (da hängt ja schon einer dran). Wenn du zweimal den gleichen Listener an einen Button hängst, wird auch zweimal die gleiche Aktion ausgeführt.

Gruß
Mag1c
 

tingel

Mitglied
Vielen Dank an euch beiden.

Ich habe es jetzt so gelöst, dass ich überprüfe, ob an dem Button schon ein Listener hängt. Sollte das nicht der Fall sein, wird einer hinzugefügt. Ist schon einer dran, benutze ich den.
 

Mag1c

Top Contributor
Hi,

naja, mächtig krumme Tüte :noe:

du solltest den Listener beim Erzeugen der GUI dran baumeln. Wenn du das Unterfenster einmal erzeugt hast, kannst du es mit setVisible(true); wieder anzeigen. GUI erzeugen oder Listener anhängen ist nicht nochmal nötig.

Gruß
Mag1c
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben