# Öffnen eines JDialog über JMenuItem / Fenster zu viel.



## son_severa (22. Okt 2006)

Hallo,

folgende Probleme erstes ist wahrscheinlich sehr einfach, ich möchte ein Dialogfenster über ein einen Menüpunkt (JMenuItem) öffnen, bitte einmal über den Code schauen und Tipps geben.

Zweites Problem wenn ich meine Anwendung ausführe öffnet sich noch immer ein weiteres Fenster im Hintergrund ohne Inhalt, warum öffnet sich das?

Ich benutze eclipse 3.2

Klasse mit Main-Methode


```
package gui;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentListener;
import java.io.Closeable;

public class MyApp extends JFrame {

	private static final long serialVersionUID = 1538980900853679052L;
	//Breite des Fensters
	private int iWidth             = 800;
	//Höhe des Fensters
	private int iHeight            = 680;
	//Kontrolle über das Layout
	private UIManager cLookAndFeel = new UIManager();
	//Zeichenfläche für das Anwendungfenster
	private JPanel cPanel          = new JPanel();
	//Hauptmenüleiste
	private JMenuBar cMenuBar      = new JMenuBar();
	//Menüpunkt Datei
	private JMenu cMenuDatei       = new JMenu("Datei");
	//MenüItem Datei öffnen
	private JMenuItem cItemDateiOp = new JMenuItem("Öffnen");
	//MenüItem Datei speichern
	private JMenuItem cItemDateiSv = new JMenuItem("Speichern");
	//MenüItem Speichern unter
	private JMenuItem cItemSaveAs  = new JMenuItem("Speichern unter");
	//MenüItem Schließen 
	private JMenuItem cItemClose   = new JMenuItem("Schließen");
	//MenüItem Anwendung beenden
	private JMenuItem cItemCloseApp  = new JMenuItem("Beenden");
	//Menüpunkt Fahrzeug
	private JMenu cMenuFahrzeug      = new JMenu("Fahrzeug");
	//MenüItem neues Fahrzeug
	private JMenuItem cItemNeuesFahr = new JMenuItem("Neues Fahrzeug");
	//MenüItem Tanken
	private JMenuItem cItemTanken  = new JMenuItem("Tanken");
	//Menüpunkt Hilfe
	private JMenu cMenuHilfe       = new JMenu("Hilfe");
	//MenüItem Hilfe
	private JMenuItem cItemHilfe   = new JMenuItem("Hilfe");
	//MenüItem Über GasWatch
	private JMenuItem cItemAbout   = new JMenuItem("Über GasWatch");
	//Auswahlfeld
	private JComboBox cList        = new JComboBox();
	//Label zum Auswahlfeld
	private JLabel cLabelAuswahl   = new JLabel("Fahrzeug ");
	//Trennlinie im JFrame
	private JSeparator cSeperator  = new JSeparator();
	//Trennlinie im Menü
	private JSeparator cSeparatorMenu = new JSeparator();
	//Tab
	private JTabbedPane cTab       = new JTabbedPane();
	//Tab Zusammenfassung
	private JPanel cPanelZusammenfassung = new JPanel();
	//Tab Tankvorgänge
	private JPanel cPanelTank            = new JPanel();
	//Tab Auswertungen
	private Auswertung cAuswertung       = new Auswertung();
	//Tab Fahrzeug
	private JPanel cPanelFahrzeug        = new JPanel();
	//ActionListener
	private MenuListener m_cActionList = new MenuListener();
	private NeuesFahrDlg m_cFDlg;
	
		
	@SuppressWarnings("deprecation")
	public MyApp(String cTitel){
		super (cTitel);
		
		//Layoutmanager deaktiviert
		cPanel.setLayout(null);
		try{
			cLookAndFeel.setLookAndFeel(cLookAndFeel.getCrossPlatformLookAndFeelClassName());
		}catch (Exception e){
			System.err.println("Kann LookAndFeel nicht setzten: " + e);
		}
		//Größe des Fensters
		setSize(iWidth,iHeight);
		
		//Aufbau des Hauptmenüs
		setJMenuBar(cMenuBar);
		cMenuBar.add(cMenuDatei);
		cMenuDatei.add(cItemDateiOp);
		cMenuDatei.add(cSeparatorMenu);
		cMenuDatei.add(cItemDateiSv);
		cMenuDatei.add(cItemSaveAs);
		cMenuDatei.add(cSeparatorMenu);
		cMenuDatei.add(cItemClose);
		cMenuDatei.add(cSeparatorMenu);
		cMenuDatei.add(cItemCloseApp);
		cMenuBar.add(cMenuFahrzeug);
		cMenuFahrzeug.add(cItemNeuesFahr);
		cMenuFahrzeug.add(cItemTanken);
		cMenuFahrzeug.addActionListener(m_cActionList);
		cMenuBar.add(cMenuHilfe);
		cMenuHilfe.add(cItemHilfe);
		cMenuHilfe.add(cItemAbout);
		
		//Hintergrundfarbe der Anwendung
		Color cColor = new Color(230, 230, 255);
		cPanel.setBackground(cColor);
		
		//Platziere Elemente
		cList.setBounds(80, 15, 180, 20);
		cLabelAuswahl.setBounds(15, 15, 60, 20);
		cSeperator.setBounds(0, 50, getWidth(), 1);
		cTab.setBounds(15, 65, getWidth()-40, getHeight()-170);
				
		//Hinzufügen der Tabs
		cTab.addTab("Zusammenfassung", cPanelZusammenfassung);
		cTab.addTab("Tankvorgänge", cPanelTank);
		cTab.addTab("Auswertung", cAuswertung.getPanel());
		cTab.addTab("Fahrzeug", cPanelFahrzeug);
		
		//Elemente der Zeichenfläche hinzufügen
		cPanel.add(cList);
		cPanel.add(cLabelAuswahl);
		cPanel.add(cSeperator);
		cPanel.add(cTab);
				
		setContentPane(cPanel);
		setVisible(true);
		
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

	public class MenuListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			if (e.equals(cItemNeuesFahr)){
				m_cFDlg = new NeuesFahrDlg();
				}
		}
	}	

	public static void main(String[] args) {
		new MyApp("GasWatch");
	}
}
```

Klasse des Dialogfensters


```
package gui;

import java.awt.GraphicsConfiguration;
import java.awt.HeadlessException;

import javax.swing.*;

public class NeuesFahrDlg extends JDialog {
	private static final long serialVersionUID = -6906677106193117241L;
	
	// Dialogfenster
	private JDialog m_cDialog            = new JDialog();
	// Zeichenfläche
	private JPanel m_cPanel              = new JPanel();
	// Layoutmanager
	private UIManager m_cLayoutManager   = new UIManager();
	// Label für Fahrzeugname
	private JLabel m_cLabelFahrzeugName  = new JLabel("Fahrzeug");
	// Label für Besitzer
	private JLabel m_cLabelBesitzer      = new JLabel("Besitzer");
	// Label für Sorte
	private JLabel m_cLabelSorte         = new JLabel("Sorte");
	// Label für Kilometerstand
	private JLabel m_cLabelKilometer     = new JLabel("Kilometerstand");
	// Label für Fassungsvermögen des Tanks
	private JLabel m_cTankGroesse        = new JLabel("Größe des Tanks");
	// Eingabefeld für Fahrzeugname
	private JTextField m_cEingabeFahrzeugname = new JTextField(); 
	// Eingabefeld für Besitzer
	private JTextField m_cEingabeBesitzer     = new JTextField();
	// Eingabefeld für Kilometerstand
	private JTextField m_cEingabeKilometerstand = new JTextField();
	// Eingabefeld für Tankgröße
	private JTextField m_cEingabeTankGr = new JTextField();
	// Auswahlfeld für Sorte
	private JComboBox m_cComboSorte = new JComboBox();
	// Flag für modalen Dialog
	private boolean m_bModal;
	
	public NeuesFahrDlg(){
		//super("Neues Fahrzeug");
		this.setTitle("Neues Fahrzeug");
		
		m_cPanel.setLayout(null);
		try{
			m_cLayoutManager.setLookAndFeel(m_cLayoutManager.getCrossPlatformLookAndFeelClassName());
		}catch (Exception e){
			System.err.println("Kann LookAndFeel nicht setzten: " + e);
		}
		// Größe des Fensters
		this.setSize(300, 300);
	
		m_cLabelFahrzeugName.setBounds(20, 20, 60, 15);
		m_cPanel.add(m_cLabelFahrzeugName);
		
		setContentPane(m_cPanel);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

}
```

Danke für Eure Hilfe.

Gruß son_severa


----------



## André Uhres (22. Okt 2006)

```
cItemNeuesFahr.addActionListener(m_cActionList);
...
    public class MenuListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            if (e.getSource().equals(cItemNeuesFahr)){ 
                m_cFDlg = new NeuesFahrDlg();
            }
        }
    }
```
Dein zweites Problem kann ich nicht beobachten.


----------



## son_severa (22. Okt 2006)

Danke damit wäre das erste Problem gelöst (so im nachhinein auch einfach gewesen mir fiel das getSource nicht ein.   

Nun bleibt nur noch das Problem mit dem Fenster welches zu viel ist. :-(


----------

