Zweimal klicken um Modalen Dialog zu beenden?

Status
Nicht offen für weitere Antworten.

VipViper2000

Aktives Mitglied
Hi Leute!

Ich hab bei meiner Anwendung jetzt nen Einstellungs-Fenster gemacht und zwar mit nem JFrame. Als ich das alles fertig hatte, ist mir aufgefallen das es besser wäre, wenn das Einstellungs-Fenster Modal wäre.

Also hab ich meine Klasse nicht von JFrame abgeleitet sondern eben von JDialog. Sonst hab ich eigentlich nichts verändert. Vorher funktionierte alles wunderbar ( nur halt, dass das Ding nicht modal war ). Aber jetzt muss ich immer 2x auf z.B. "Abbrechen" drücken, damit das Ding sich schließt.

Der Abbrechen Knopf schickt halt ne Message an den ActionListener, der dann wiederrum dispose() aufruft. Hat jemand ne Ahnung, warum ich immer 2x klicken muss?

Hab hier mal die relevanten Stellen reinkopiert:

Code:
public class ConfigGui extends JDialog
        implements ActionListener, MouseListener, ChangeListener {
    private final String ANZEIGE_PANEL   = "anzeigePanel";
    private final String SONSTIGES_PANEL = "sonstigesPanel";
    JSpinner             anzahlFilmeSpinner;
    Controller           con;
    JPanel               leftPanel, rightPanel, anzeigePanel, controllPanel,
                         buttonPanel, sonstigesPanel;
    Container  main;
    JTextField pfadFeld, pfadThumbFeld, colorButton;
    JCheckBox  splashCheck;
    boolean isSplashEnabled;
    int displayableMovies;
    Color cinemaxColor;
    String coverPath, coverThumbPath;
    
    private static ConfigGui dia;
    

    //~--- constructors -------------------------------------------------------

    private ConfigGui(Frame parent, Controller con) {
        super(parent, "Cinemax - Einstellungen", true);
        this.con = con;
        initPref();
        initAndShowGui();        
    }

    //~--- methods ------------------------------------------------------------
    
    public static void showConfigGui(Controller con, Component parent){
    	
    	Frame frame = JOptionPane.getFrameForComponent(parent);
    	
    	dia = new ConfigGui(frame, con);
    	dia.setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("abortButton")) {
        	System.out.println("Abord gedrückt");
            abort();
        }
    }

    private void initAndShowGui() {

        // Fenster einstellen
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        addWindowListener(new MyWindowAdapter(this) {
            public void windowClosing(WindowEvent e) {
               gui.abort();
            }
        });
        setResizable(false);
        

        // Das Content Pane holen
        main = getContentPane();

        // LeftPanel holen & adden
        leftPanel = getLeftPanel();
        main.add(leftPanel, BorderLayout.LINE_START);

        // Right-Panel holen & adden. RightPanel benutzt ein CardLayout
        // zum Anzeigen der Einstellungsdialoge. Deshalb werden Sie auch
        // hier geaddet
        rightPanel = new JPanel(new CardLayout());
        rightPanel.add(getAnzeigePanel(), ANZEIGE_PANEL);
        rightPanel.add(getSonstigesPanel(), SONSTIGES_PANEL);
        main.add(rightPanel, BorderLayout.CENTER);

        // Button-Panel holen & adden
        buttonPanel = getButtonPanel();
        main.add(buttonPanel, BorderLayout.PAGE_END);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }


    /**
     * Bricht den Einstellungs-Dialog ab. Dazu werden als erstes die 
     * alten Einstellungen aus der XML-Datei geladen.
     *
     */
    public void abort(){
    	initPref();
    	con.getGui().setDisplayableMovies(displayableMovies);
    	dispose();
    }
}

Danke schonmal,
VipViper2000
 

VipViper2000

Aktives Mitglied
Also: Danke für Eure Hilfe.

Aber: LOL. Sorry, musste aber jetzt sein. Die Sache mit den zwei Fenstern war auch mein erster Gedanke, ist aber nicht. Und die das hier jemand als Antwort auf eine Frage das Wort >>Debuggen<< hinschreibt finde ich ehrlich gesagt ein wenig daneben. Aber egal. Es hätte ja sein können, das jemand nen groben Fehler sieht ( Für die, die sich den Code wenigstens mal angesehen haben ).


Gruß
VipViper2000
 

L-ectron-X

Gesperrter Benutzer
OK, wie rufst du denn diesen Dialog auf?

Denn so wie ich das sehe, erzeugst du per Konstruktoraufruf das Fenster zwei mal...
 

VipViper2000

Aktives Mitglied
Ne, ich rufe den Constructor gar net auf ( wie denn auch, der ist private ). Ich rufe von aussen die statische Methode
showConfigGui() auf...
 

L-ectron-X

Gesperrter Benutzer
OK, ich hab mich blöd ausgedrückt.
Dann solltest du einen der beiden setVisible(true)-Aufrufe entfernen.
 

André Uhres

Top Contributor
VipViper2000 hat gesagt.:
..Debuggen..finde ich ehrlich gesagt ein wenig daneben..
Na ja, das ist immer das erste was ich tue bei einem Fehler. Glaub nicht dass ich daneben lieg :D
VipViper2000 hat gesagt.:
.. Es hätte ja sein können, das jemand nen groben Fehler sieht ( Für die, die sich den Code wenigstens mal angesehen haben ).
Ich hab mich minimum eine halbe Stunde mit deinem Code auseinander gesetzt, bis ich schliesslich feststellte,
dass ich ihn nicht für dich debuggen kann (da fehlt so viel Code der damit verschachtelt ist) ???:L

Falls du nicht wissen solltest was debuggen bedeutet:
Debuggen beinhaltet eine Ablaufverfolgung des zu untersuchenden Programmes.
Dabei wird z.B. bei jedem Einsprung in eine Funktion, sowie bei jedem Verlassen eine Meldung ausgegeben,
sodass der Programmierer mitverfolgen kann, wann und von wo welche Funktion aufgerufen wird.
Zusammen mit weiteren Diagnose-Ausgaben lässt sich so der Programmablauf eines fehlerhaften Programmes
häufig sehr schnell bis zu der fehlerverursachenden Funktion zurückverfolgen.
 

thE_29

Top Contributor
Jop, man könnte auch sagen, du musst ja net wirklich Debuggen!

Aber ein paar System.out.println dort und da, helfen einem auch schon weiter, bzw lassen einem die Methodenabläufe besser nachvollziehen ;)
 

VipViper2000

Aktives Mitglied
Also vielleicht entsteht hier ein falscher Eindruck: Ich bin Informatik-Student und weiss was debuggen bedeutet ;). Und das es an einem setVisible() Aufruf liegt, kann eigentlich nicht sein, denn ich kann eigentlich sooft ich will setVisible(true) aufrufen; da wird nicht jedes Mal eine neue Instanz erzeugt ( es sei denn, es wäre ein Fehler JDK, was ich aber nicht glaube / hoffe ).

Hab momantan auch wenig Zeit, aber ich werd mich das nochmal ansehen und die Lösung dann posten.

Gruß und Dank,
VipViper2000
 

thE_29

Top Contributor
Es wird ja auch keine neue Instanz erzeugt, sondern ein neuer Dialog ;)


Sicher das wirklich nicht 2übereinander liegen?

Lass dir mal im abort ne Meldung ausgeben!

Vielleicht wird die ja wirklich 2mal aufgerufen?!?
 

VipViper2000

Aktives Mitglied
Das mit der Meldung im abort() hatte ich schon gemacht: Sie wird aufgerufen, wenn ich abbrechen drücke. Es liegen definitiv nicht 2 übereinander.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Warum wird zweimal die Affinetransformation estellt (2Dgraphics, Java)? AWT, Swing, JavaFX & SWT 31
S Objekt einmal laden zweimal anzeigen 3d AWT, Swing, JavaFX & SWT 6
P LayoutManager BorderLayout - Zweimal Norden ? AWT, Swing, JavaFX & SWT 4
O Login Dialog zweimal öffnen AWT, Swing, JavaFX & SWT 2
O Swing Button löst zweimal aus, obwohl nur einmal geklickt AWT, Swing, JavaFX & SWT 3
kodela AWT eine Seite - zweimal print() AWT, Swing, JavaFX & SWT 7
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
B ImageIO.read() zweimal hintereinander aus ObjectInputStream funktioniert nicht AWT, Swing, JavaFX & SWT 4
P Einen Komponent zweimal zu einem Panel hinzufügen? AWT, Swing, JavaFX & SWT 18
S Einfacher Klick aber mouseClicked() zweimal aufgerufen AWT, Swing, JavaFX & SWT 3
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
M Button klicken anstelle der Tastatur AWT, Swing, JavaFX & SWT 2
G Swing Durch GlassPane auf Button klicken und ActionEvent auslösen AWT, Swing, JavaFX & SWT 0
D Swing Durch JFRAME hindurch klicken AWT, Swing, JavaFX & SWT 2
P TextField beim klicken von JButton speichern AWT, Swing, JavaFX & SWT 17
D Mehrmals auf Node im JTree klicken AWT, Swing, JavaFX & SWT 2
frankred Swing JMenu verschwindet nicht beim klicken ausserhalb des JMenu! AWT, Swing, JavaFX & SWT 4
M 3D-Grafik Bewegung mit der Maus ohne Klicken AWT, Swing, JavaFX & SWT 10
Guybrush Threepwood JButton Background beim Klicken AWT, Swing, JavaFX & SWT 4
S Arrayinhalt nach Klicken des Buttons im Fenster ausgeben AWT, Swing, JavaFX & SWT 27
R JPanel durch "klicken und ziehen" verschieben AWT, Swing, JavaFX & SWT 8
D Sortierung beim Klicken auf Header einer JdbTable verhindern AWT, Swing, JavaFX & SWT 3
C Wie würdet ihr das machen? JPanel beim Klicken austauschen! AWT, Swing, JavaFX & SWT 4
N Die Zeile einer JTable verändert beim klicken ihre Farbe? AWT, Swing, JavaFX & SWT 7
L Die Farbe von JButton beim Klicken ändern? AWT, Swing, JavaFX & SWT 4
S [JTree] mehrmals auf den selben Node klicken AWT, Swing, JavaFX & SWT 11
G JButton klicken und MS Word öffnen AWT, Swing, JavaFX & SWT 3
G JButton mit ENTER Taste klicken AWT, Swing, JavaFX & SWT 7
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
Z JSlider im Modalen-Fenster AWT, Swing, JavaFX & SWT 0
P Swing eigenen Modalen JDialog AWT, Swing, JavaFX & SWT 6
S Modalen JFrame AWT, Swing, JavaFX & SWT 5
S Modalen Dialog nachbauen..? AWT, Swing, JavaFX & SWT 4
Daniel_L Nachrichten/Event aus nicht-modalen Dialogen abfragen? AWT, Swing, JavaFX & SWT 4
I Wie mache ich einen modalen JPanel? AWT, Swing, JavaFX & SWT 2
H nicht modaler Dialog verdeckt modalen Dialog AWT, Swing, JavaFX & SWT 5
D Modalen JDialog anzeigen AWT, Swing, JavaFX & SWT 3
T actionevent an modalen dialog AWT, Swing, JavaFX & SWT 5
H Modalen Dialog aus modalem Dialog aufrufen AWT, Swing, JavaFX & SWT 1
G MouseEvent Problem mit JFrame über einen modalen JDialog AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben