tutorials.de Buch-Aktion 02/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
1235
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Markus Markus ist offline Rookie
    Registriert seit
    Dec 2007
    Beiträge
    7
    Hallo,

    ich habe gerade ein kleijnes Projekt für die Uni zu machen.
    Als Oberfläche verwende ich Swing.
    Situation:
    - Ich habe 2 Fenster
    - Das erste Fenster wird mittels main() gesetVisibled()
    - Das 2 Fenster ist quasi ein Unterfenster. Gestartet mittels Button des ersten Fenters.
    - Das 2. Fenster enthält wieder ein Button ("Abbrechen")
    - Wenn ich auf das Abbrechen Button klicke möchte ich, dass das 2. Fenster geschlossen wird, und das erste Fenster wieder aktiviert wird.

    Prämissen:
    - Wenn das 2. Fenster geöffnet ist soll es nicht möglich sein das erste Fenster anzuwählen, bzw irgendetwas damit zu machen. Gesehen werden kann es natürlich. Ich denke ihr wisst, was ich meine.

    Problem:
    - Ich habe die Fuktion thisFrame (ist ein JFrame, welches auf this des Fensters zeigt).dispose(); benutzt um das 2. Fenster zu schließen. Das geht aber nicht!
    Ich habe in der Klasse des erstens Fensters den ActionListener geschrieben, wenn das 2. Fenster geschlossen wird. Ach seht einfach selbst!

    Source:
    Fenster 1:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
            buNew.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    setEnabled(false);
                    NeuerKundeGUI neuerkundeGUI = new NeuerKundeGUI(Kunden);
                    neuerkundeGUI.setVisible(true);
                    neuerkundeGUI.addWindowListener(new WindowAdapter(){
                        public void windowClosing(WindowEvent e) {
                           setEnabled(true);
                           setVisible(true);
                        }
                    });
                }
            });

    Fenster 2:
    Code :
    1
    2
    3
    4
    5
    
    Abbrechen.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    thisFrame.dispose();
                }
            });

    Die Methode windowClosing wird nicht aufgerufen, wenn dispose auf dem 2. Fenster ausgeführt wird.


    Wo liegt mein Fehler? Wie könnte man das oben beschriebene noch realisieren!

    Grüße

    dynamicx
     

  2. #2
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Brokat
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    470
    Deine 2. Klasse muss von der Klasse JDialog (nicht JFrame) abgeleitet werden. Dann hast du eine Fuktion setModal(boolean). Bei true, wird das erreicht was du möchtest, dass das andere Fenster nicht benutzt werden kann.

    Warum scheibst du bei ActionListener vom Button Abbrechen nicht einfach nur dispose()?
    Geändert von HonniCilest (23.06.09 um 12:31 Uhr)
     

  3. #3
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    Wie wäre es einfach so?

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    
    package core;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
     
    public class WindowOne extends JFrame
    {
        private static final long serialVersionUID = 1L;
        
        private static JDialog windowTwo;
        
        public WindowOne()
        {
            super("Window One");
            
            setSize(300, 300);
            setLocationRelativeTo(null);
            setResizable(false);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            final JFrame i = this;
            JButton button = new JButton();
            button.setText("Go");
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e)
                {
                    setEnabled(false);
                    
                    if(windowTwo == null)
                        windowTwo = new WindowTwo(i);
                    windowTwo.setVisible(true);
                }
            });
            add(button);
            setVisible(true);
        }
        public static void main(String[] args)
        {
            new WindowOne();
        }
    }
    ///////////////////////////////////////////////////////////////////////////
    package core;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
     
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
     
    public class WindowTwo extends JDialog
    {
        private static final long serialVersionUID = 1L;
     
        public WindowTwo(final JFrame i)
        {
            super();
            
            setSize(100, 100);
            setResizable(false);
            setTitle("Window Two");
            setLocationRelativeTo(i);
            setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
            
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent arg0)
                {
                    i.setEnabled(true);
                    setVisible(false);
                }
            });
            
            JButton button = new JButton("Abort");
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e)
                {
                    WindowListener[] listeners = getWindowListeners();
                    for(WindowListener listener:listeners)
                        listener.windowClosing(null);
                }           
            });
            add(button);
        }
    }
     

  4. #4
    Markus Markus ist offline Rookie
    Registriert seit
    Dec 2007
    Beiträge
    7
    Danke Jungs. Habe die Lösung von Kai angewendet und es hat super funktioniert.
    Trotzdem Danke auch an HnniCilest

    Gruß
    dynamicx
     

Ähnliche Themen

  1. Swing Fenster nicht mehrmals öffnen
    Von MikaM im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 5
    Letzter Beitrag: 08.07.09, 10:25
  2. Fenster schließen ohne Applikation zu beenden.
    Von J1M1 im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 11.11.07, 13:21
  3. Programm will nicht beenden
    Von BlinkSkater im Forum C/C++
    Antworten: 34
    Letzter Beitrag: 20.04.05, 17:14
  4. Programm Beenden und alles Schließen
    Von Serethos im Forum Java
    Antworten: 14
    Letzter Beitrag: 25.02.05, 10:52
  5. Fenster schließen Button
    Von CemO im Forum HTML & XHTML
    Antworten: 1
    Letzter Beitrag: 26.01.05, 11:13