tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
600
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    TDS95 TDS95 ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Beiträge
    4
    Hallo,

    ich habe folgendes Problem:

    ich habe einen JFrame erstellt und diesem eine JMenuBar hinzugefügt mit entsprechenden Menüpunkten. Und jetzt möchte ich über einen von diesen Menüpunkten einen anderen JFrame als so ne Art "Über ..." Fenster aufrufen.

    So sieht mein Code aus
    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
    
    import javax.swing.*;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import java.awt.BorderLayout;
    /**
     * @author 
     * @version 
     */
    public class main
    {
        JFrame mainframe;
        JMenuBar mainmenu;
        JFrame aboutFrame;
        JLabel aboutLabel;
        JButton aboutCloseButton;
        // JMenu Elemente
        JMenu file;
        JMenu help;
        // Datei
        JMenuItem exit;
        // Hilfe
        JMenuItem about;
        JMenuItem helpF;
     
        public main()
        {
            new JMenuBarBeispiel();
            new JAboutFrame();
        }
        public class JMenuBarBeispiel implements ActionListener {
            public JMenuBarBeispiel() {
                // Erzeugt Hauptfenster
                mainframe = new JFrame("Architekt v1.00");
                mainframe.setVisible(true);
                mainframe.setSize(500, 400);
                mainframe. setLocationRelativeTo(null);
                mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                // Erzeugt Menüleiste
                mainmenu = new JMenuBar();
                // Erzeuge Menüelemente
                file = new JMenu("Datei");
                help = new JMenu("Hilfe");
                // Erzeuge Untermenüelemente
                exit = new JMenuItem("Beenden");
                exit.addActionListener(this);
                about = new JMenuItem("Über");
                about.addActionListener(this);
                helpF = new JMenuItem("Hilfe");
                helpF.addActionListener(this);
                // Menüelemente hinzufügen
                mainmenu.add(file);
                mainmenu.add(help);
                // Untermenüelemente hinzufügen
                file.add(exit);
                help.add(about);
                help.add(helpF);
                // JMenuBar an Fenster binden
                mainframe.add(mainmenu, BorderLayout.NORTH);
            }
            public void actionPerformed(ActionEvent object) {
                if (object.getSource() == exit) {
                    System.exit(0);
                }
            }
        }
        public class JAboutFrame implements ActionListener {
            public void JAboutFrame() {
                //Erzeuge Fenster
                aboutFrame = new JFrame("Architekt v1.00 - Über");
                aboutLabel = new JLabel("Test");
                aboutCloseButton = new JButton("Schließen");
                aboutLabel.setVisible(false);
                aboutFrame.setVisible(false);
                aboutFrame.setSize(100, 75);
                aboutFrame.setLocationRelativeTo(null);
                aboutFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
            public void actionPerformed(ActionEvent object) {
                if (object.getSource() == about) {
                    aboutFrame.setVisible(true);
                    aboutFrame.setAlwaysOnTop(true);
                }
            }
        }
    }

    Mein Problem jetzt, wenn ich den JFrame über den Menüpunkt "Über" aufrufen möchte erscheint der Frame einfach nicht. Ich weis einfach nicht weiter, hat einer von euch vielleicht einen Tipp für mich?

    Vielen Dank schon mal im Vorraus
     

  2. #2
    G1n0 0n3 G1n0 0n3 ist offline Mitglied Bronze
    Registriert seit
    Aug 2011
    Beiträge
    32
    Hi,

    benutze doch lieber ein JFrame und für die restlichen Fenster könntest du JDialog verwenden.

    Gruß
    G1n0
     

  3. #3
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi,
    wie G1n0 0n3 schon sagte, ist es ratsam das Hauptfenster als JFrame zu machen und "Popup"-Fenster als Dialoge. Ledigliche Fenster, die "unabhängig" vom Hauptfenster sein sollen, ist es sinnvoll als JFrame zu machen.

    Jetzt aber zu deinem Problem. In deiner inneren Klasse JMenuBarBeispiel, welche du von ActionListener implementieren lässt, erzeugst du das Menü richtig. Allerdings hast du vergessen deinen ActionListener so anzupassen, dass er auch auf all die Menüpunkte reagiert, die ihm zugewießen wurden.
    Hier erzeugst du den Menüpunkt "Über" und weißt ihm den ActionListener deiner JMenuBarBeispiel zu.
    Code java:
    1
    2
    
    about = new JMenuItem("Über");
    about.addActionListener(this);
    Allerdings reagierst du in deinem ActionListener nicht auf dieses Event.
    Code java:
    1
    2
    3
    4
    5
    
    public void actionPerformed(ActionEvent object) {
          if (object.getSource() == exit) {
              System.exit(0);
          }
    }
    Du musst den Inhalt des ActionListeners von deiner inneren Klasse JAboutFrame noch mit zu dem ActionListener von JMenuBarBeispiel hinzufügen.
    Code java:
    1
    2
    3
    4
    5
    6
    
    public void actionPerformed(ActionEvent object) {
          if (object.getSource() == about) {
              aboutFrame.setVisible(true);
              aboutFrame.setAlwaysOnTop(true);
          }
    }

    Das würde dann so aussehen. (JMenuBarBeispiel)
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    public void actionPerformed(ActionEvent object) {
          if (object.getSource() == about) {
              // aboutFrame wird eine NullPointerException werfen, da das JFrame noch nicht initialisiert wurde
              aboutFrame.setVisible(true);
              aboutFrame.setAlwaysOnTop(true);
          } else if (object.getSource() == exit) {
              System.exit(0);
          }
    }

    Gruß

    Fabio
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

Ähnliche Themen

  1. JFrame repaint durch anderen Thread blockiert
    Von Fabiian im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 19.10.10, 23:45
  2. JFrame- Methoden aus Main aufrufen
    Von Andre_Java im Forum Java
    Antworten: 3
    Letzter Beitrag: 18.12.07, 14:08
  3. Aus einem JFrame anderes JFrame starten
    Von maddos im Forum Java
    Antworten: 3
    Letzter Beitrag: 09.08.07, 12:24
  4. Ein JFrame aus einem anderem JFrame aufrufen!
    Von Lautsprecher im Forum Java
    Antworten: 1
    Letzter Beitrag: 14.11.05, 09:37
  5. Antworten: 2
    Letzter Beitrag: 07.09.05, 12:16

Stichworte