JFrame öffnet sich mehrmals

dat_vin

Mitglied
Huhu,

folgendes Problem:

Ich habe ein PopupMenu, welches dementsprechend diverse JFrames öffnet. Jetzt habe ich bereits ein JFrame über das Menü geöffnet und möchte ein anderes öffnen, leider öffnet sich dann das nächste 2x. Möchte ich wieder ein weiteres öffnen, öffnet sich dieses 3x etc...

Hier der Code:
Java:
JPopupMenu helpPopupMenu = new JPopupMenu();
    JMenuItem regMenuItem = new JMenuItem("Registrieren");
    JMenuItem passMenuItem = new JMenuItem("Passwort vergessen");
    JMenuItem adminMenuItem = new JMenuItem("Admin kontaktieren");

   private void jButtonLoginHelpActionPerformed(java.awt.event.ActionEvent evt) {                                                 

        helpPopupMenu.add(regMenuItem);
        helpPopupMenu.add(passMenuItem);
        helpPopupMenu.add(adminMenuItem);
        

        String mailAdmin = "example@admin.com";

        jButtonLoginHelp.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent eMouse) {
                helpPopupMenu.show(eMouse.getComponent(), eMouse.getX(), eMouse.getY());
            }
        });
        
        regMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent eReg) {
                Register reg = new Register();
                reg.setLocationRelativeTo(getParent());
                if (!reg.isVisible()) {
                    reg.setVisible(true);
                }
                
            }
        });
        passMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ePass) {
                PasswordRecover pass = new PasswordRecover();
                pass.setLocationRelativeTo(null);
                pass.setVisible(true);
            }
        });
        adminMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent eAdmin) {
                try {
                    Desktop.getDesktop().mail(new URI("mailto:" + mailAdmin));
                } catch (Exception err) {
                    err.printStackTrace();
                }
            }
        });
    }

Die entsprechenden Fenster werden über Dispose geschlossen.

Wie bekomme ich jetzt diesen Bug behoben?^^
 

kaoZ

Top Contributor
erstmal geh davon weg JFrames zu öffnen.

Leite deine Klassen von JDialog ab, erstelle für jedes spezielle Fenster einen eigenen Dialog

Du kannst auch jeden Dialog schon beim initialisieren erstellen und einfach nur sichtbar machen wenn du es benötigst.
 
Zuletzt bearbeitet:

Kevin94

Top Contributor
Von wo wird den diese Methode aufgerufen?
Mein Tipp wäre, dass du von dem ActionListener der das Fenster öffnet bei jedem mal eine weitere Instanz dem Button hinzufügst, sodass er dann 2x, 3x,... aufgerufen wird.
 

kaoZ

Top Contributor
Probier das hier mal aus dann siehts du grob was ich meine.

Das hier dient lediglich der illustration, und würde als finale version keinesfalls taugen....

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;


@SuppressWarnings("serial")
public class Foo extends JDialog{

	private JFrame parent;
	
	public Foo(JFrame parent){
		setTitle("Dialog");
		setSize(250,250);
		setLocationRelativeTo(parent);
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		this.parent = parent;
	}
	
	public static void main(String[] args){
		JFrame f = new JFrame("Mein Frame");
		f.setSize(500,500);
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
		Foo dialog = new Foo(f);
		
		JMenuBar bar = new JMenuBar();
		JMenu menu = new JMenu("Dialog");
		JMenuItem item = new JMenuItem("Open dialog...");
		item.addActionListener(new ActionListener(){
			
			@Override
			public void actionPerformed(ActionEvent e){
				dialog.setVisible(true);
			}
		});
		
		menu.add(item);
		bar.add(menu);
		
		f.setJMenuBar(bar);
		
		f.setVisible(true);
	}
}
 
Zuletzt bearbeitet:

dat_vin

Mitglied
Das mit dem Dialog hört sich gut an.

, und würde als finale version keinesfalls taugen....
warum?^^

Mein Tipp wäre, dass du von dem ActionListener der das Fenster öffnet bei jedem mal eine weitere Instanz dem Button hinzufügst, sodass er dann 2x, 3x,... aufgerufen wird.
bissel kontraproduktiv oder?


Hab mal den kompletten Code zur Verdeutlichung hochgeladen. Leider arbeite ich von Anfang an mit Netbeans und ich wüsste nicht wie ich Buttons etc per Hand setzen kann bzw. so positionieren kann wie ich es will.

Die Verwendung des Frames kommt mir gelegener.

Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package meins;

import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URI;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;

/**
 *
 * @author vin138
 */
public class Login extends javax.swing.JFrame {

    JPopupMenu helpPopupMenu = new JPopupMenu();
    JMenuItem regMenuItem = new JMenuItem("Registrieren");
    JMenuItem passMenuItem = new JMenuItem("Passwort vergessen");
    JMenuItem adminMenuItem = new JMenuItem("Admin kontaktieren");

    public Login() {
        initComponents();
        setLocationRelativeTo(null);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPopupMenu1 = new javax.swing.JPopupMenu();
        jLabelLoginUser = new javax.swing.JLabel();
        jTextFieldLoginUser = new javax.swing.JTextField();
        jLabelLoginPassword = new javax.swing.JLabel();
        jPasswordFieldLoginPassword = new javax.swing.JPasswordField();
        jButtonLoginLogin = new javax.swing.JButton();
        jButtonLoginHelp = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Login");
        setBackground(new java.awt.Color(255, 255, 255));
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        setName("frameLogin"); // NOI18N
        setResizable(false);

        jLabelLoginUser.setText("Benutzername");

        jLabelLoginPassword.setText("Passwort");

        jButtonLoginLogin.setText("Anmelden");
        jButtonLoginLogin.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonLoginLoginActionPerformed(evt);
            }
        });

        jButtonLoginHelp.setText("Hilfe");
        jButtonLoginHelp.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonLoginHelpActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTextFieldLoginUser, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelLoginUser))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPasswordFieldLoginPassword, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelLoginPassword))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jButtonLoginLogin, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButtonLoginHelp, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jButtonLoginHelp)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabelLoginUser)
                        .addComponent(jLabelLoginPassword)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextFieldLoginUser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPasswordFieldLoginPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButtonLoginLogin))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        setBounds(0, 0, 368, 104);
    }// </editor-fold>                        


    private void jButtonLoginHelpActionPerformed(java.awt.event.ActionEvent evt) {                                                 

        helpPopupMenu.add(regMenuItem);
        helpPopupMenu.add(passMenuItem);
        helpPopupMenu.add(adminMenuItem);
        

        String mailAdmin = "example@admin.com";

        jButtonLoginHelp.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent eMouse) {
                helpPopupMenu.show(eMouse.getComponent(), eMouse.getX(), eMouse.getY());
            }
        });
        
        regMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent eReg) {
                Register reg = new Register();
                reg.setLocationRelativeTo(getParent());
                if (!reg.isVisible()) {
                    reg.setVisible(true);
                }
                
            }
        });
        passMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ePass) {
                PasswordRecover pass = new PasswordRecover();
                pass.setLocationRelativeTo(null);
                pass.setVisible(true);
            }
        });
        adminMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent eAdmin) {
                try {
                    Desktop.getDesktop().mail(new URI("mailto:" + mailAdmin));
                } catch (Exception err) {
                    err.printStackTrace();
                }
            }
        });
    }                                                

    private void jButtonLoginLoginActionPerformed(java.awt.event.ActionEvent evt) {                                                  

    }                                                 

    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see [url=http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html]How to Set the Look and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)[/url] 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Windows".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Login().setVisible(true);
            }
        });

    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButtonLoginHelp;
    private javax.swing.JButton jButtonLoginLogin;
    private javax.swing.JLabel jLabelLoginPassword;
    private javax.swing.JLabel jLabelLoginUser;
    private javax.swing.JPasswordField jPasswordFieldLoginPassword;
    private javax.swing.JPopupMenu jPopupMenu1;
    private javax.swing.JTextField jTextFieldLoginUser;
    // End of variables declaration                   
}

Der Register Frame enthält halt schon sehr viele Sachen.
 

Kevin94

Top Contributor
Genau das was ich gedacht habe. In initComponents fügst du dem Button einen ActionListener hinzu, der die Methode jButtonLoginHelpActionPerformed aufruft. Und in dieser Methode fügst du, bei jedem Aufruf dem Button einen ActionListener hinzu, der ein Fenster öffnet. Schreib den Code zum Fenster/Dialog öffnen einfach direkt in jButtonLoginHelpActionPerformed

EDIT: Was ist den mit den Inline-Code tags
Code:
 passiert?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
J Klick auf Button -> JFrame öffnet sich erneut. & Datei lässt sich nicht löschen Java Basics - Anfänger-Themen 7
K Erste Schritte Ein Button öffnet ein JFrame Java Basics - Anfänger-Themen 16
L JFrame öffnet 2tes JFrame, welches Daten vom 1sten braucht. Java Basics - Anfänger-Themen 21
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
E JFrame + Buffer-strategy Java Basics - Anfänger-Themen 8
I JFrame / Screen auf zweitem (definiertem) Monitor öffnen Java Basics - Anfänger-Themen 3
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
B HSQL mit JFrame steuern Java Basics - Anfänger-Themen 4
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
D Erste Schritte png in JFrame anzeigen? Java Basics - Anfänger-Themen 3
Thomathy Interface Wie schließt man ein anderes JFrame Fenster? Java Basics - Anfänger-Themen 6
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
S Kontrollieren ob jframe disposed ist Java Basics - Anfänger-Themen 3
Elyt JFrame in den Hintergrund verschieben Java Basics - Anfänger-Themen 3
OSchriever JFrame-Anwendungsfenster verschieben Java Basics - Anfänger-Themen 17
M Bild in JFrame Java Basics - Anfänger-Themen 1
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
S JFrame mit Hintergrundbild und Button Java Basics - Anfänger-Themen 4
S JFrame Java Basics - Anfänger-Themen 15
I JFrame proportional verkleinerbar machen Java Basics - Anfänger-Themen 3
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
T Auslagern von Methoden bei einem JFrame Java Basics - Anfänger-Themen 6
N Erste Schritte JFrame Caesar-Verschlüsselung Java Basics - Anfänger-Themen 23
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
3 JFrame immer im Hintergrund Java Basics - Anfänger-Themen 1
F Interface JFrame mit if-Abfrage automatisch schließen lassen? Java Basics - Anfänger-Themen 3
R JFrame nicht verschiebbar Java Basics - Anfänger-Themen 2
T Wenn JFrame Textfelder Hintergrund Grün dann... (if) Java Basics - Anfänger-Themen 3
K Java JFrame mit Hintergrundbild erstellen Java Basics - Anfänger-Themen 1
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
H Eclipse JFrame Java Basics - Anfänger-Themen 3
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
I JFrame minimieren wenn anderes Programm minimiert wird Java Basics - Anfänger-Themen 1
K Methoden Methode starten wenn JFrame geöffnet wird Java Basics - Anfänger-Themen 2
D Erste Schritte JFrame Inhalte werden nicht angezeigt Java Basics - Anfänger-Themen 8
A Variablen In anderer Klasse auf Objekte von JFrame zugreifen Java Basics - Anfänger-Themen 1
B Ist MyFrame oder JFrame besser? Java Basics - Anfänger-Themen 3
Y JFrame sichtbarkeit Java Basics - Anfänger-Themen 4
KeVoZ_ Label auf JFrame willkürlich Positionieren Java Basics - Anfänger-Themen 2
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
P JFrame nur einmal öffnen Java Basics - Anfänger-Themen 4
D JFrame - 10 Sekunden bis zum schließen warten. Java Basics - Anfänger-Themen 2
V Tastatur initialisieren JFrame Probleme Java Basics - Anfänger-Themen 6
J JPG in JFrame anzeigen lassen Java Basics - Anfänger-Themen 3
J JFrame ausgabe von Werten Java Basics - Anfänger-Themen 9
F GUI als Klasse oder extend JFrame? Java Basics - Anfänger-Themen 6
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
S Wieso wird mein JFrame transparent dargestellt? Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
thomasbomme Grafikfehler JFrame- Cleartype Java Basics - Anfänger-Themen 1
GreyFox Arbeit mit JFrame Java Basics - Anfänger-Themen 8
T Erste Schritte 2 Codes zusammen fügen / Label in JFrame Java Basics - Anfänger-Themen 1
Z Zwei Images auf einem JFrame - Aber nur eins wird angezeigt! Java Basics - Anfänger-Themen 5
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
W 2 JPanels in 2Klasse in einem JFrame zusammenfügen Java Basics - Anfänger-Themen 12
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
M Rahmen für undekorierten JFrame Java Basics - Anfänger-Themen 6
S JPanel wird versetzt auf JFrame gelegt Java Basics - Anfänger-Themen 2
B Erste Schritte JFrame in Klasse auslagern Java Basics - Anfänger-Themen 4
H JFrame komplett schließen Java Basics - Anfänger-Themen 3
S Brauche hilfe bei Pong (JFrame) Java Basics - Anfänger-Themen 2
M hintergrund in jframe festlegen Java Basics - Anfänger-Themen 4
J JFrame Render Fehler - Warum? Java Basics - Anfänger-Themen 2
I komponenten werden in JFrame nicht richtig angezeigt Java Basics - Anfänger-Themen 1
E 2. JFrame erkennt 1. Frame Java Basics - Anfänger-Themen 6
D Best Practice JFrame im JFrame Java Basics - Anfänger-Themen 2
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
S Erste Schritte Von JFrame in nächstes JFRame wechseln Java Basics - Anfänger-Themen 0
V JFrame aktualisieren Java Basics - Anfänger-Themen 6
S JFrame ist nicht schwarz Java Basics - Anfänger-Themen 5
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
S JFrame wird nicht "bemalt" Java Basics - Anfänger-Themen 2
M Unsichtbare Objekte in JFrame Java Basics - Anfänger-Themen 2
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
Sogomn JLabel in anderer Klasse zum JFrame hinzufügen Java Basics - Anfänger-Themen 2
B Drawline wird auf JFrame nicht angezeigt Java Basics - Anfänger-Themen 3
N Fokus setzen nachdem JFrame in Vordergrund geholt wurde Java Basics - Anfänger-Themen 7
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
S JFrame leeren Java Basics - Anfänger-Themen 6
X JFrame Fenster einzeln schließen Java Basics - Anfänger-Themen 2
K Erste Schritte Jframe Im Jpanel Java Basics - Anfänger-Themen 4
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
P JFrame Component automatische Größe verhindern Java Basics - Anfänger-Themen 2
D JFrame, Komponenten verschmiert. Java Basics - Anfänger-Themen 15
M Schriftfarbe in JFrame Java Basics - Anfänger-Themen 24
A JFrame läuft ewig? Java Basics - Anfänger-Themen 2
U JFrame durch ActionListener erweitern Java Basics - Anfänger-Themen 4
B Wie kann man auf das JFrame einer anderen Klasse zugreifen, etwas hinzufügen und entfernen?? Java Basics - Anfänger-Themen 3
N JFrame-Objekt in neuer Methode nicht verfügbar? Java Basics - Anfänger-Themen 3
A Frage zu: JFrame setLocationRelativeTo Java Basics - Anfänger-Themen 3
N Erste Schritte Prozessor Kernanzahl in JFrame Java Basics - Anfänger-Themen 3
DStrohma Transparenter JFrame Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben