Nach MenuKlick FileDialog öffnen

tobitobsen82

Grünschnabel
Hallo Leute,

habe folgende Programmstruktur

3 Klassen:
FensterElemente -> Methoden zum Erstellen von Buttons, etc.
Menu -> Menuleiste wird erstellt
Fenster -> eigentliches Fenster wird per Konstruktor erstellt, Buttons usw geaddet, ActionHandling befindet sich auch darin

Mein Problem:
1. Wie kann ich von meiner inneren ActionPerformed Klasse auf die Menu-Klasse zugreifen, um an den Listener eines jeden Menüpunkts ranzukommen?
2. Was mache ich bei meiner ActionPerformed falsch, sodass das instanzieren eines FileDialogs fehlschlägt? (mit dem ersten Paramater - derzeit this - kann er nichts anfangen. Ich schätze mal da muss das Fenster rein, weiß aber nicht wie...)

Danke für eure Hilfe.

Nachfolgend die beiden Klassen Fenster und Menu. In Menu habe ich erstmal nur mit einem Menupunkt angefangen (oeffnen). Der Rest muss da noch entsprechend angepasst werden.

Fenster.java:

Code:
package listener;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.plaf.basic.BasicOptionPaneUI.ButtonActionListener;
import javax.swing.text.JTextComponent;

public class Fenster{

	/**
	 * Dateiname: Fenster.java
	 * Compiler: Eclipse SDK 3.2.1
	 * Autor: Tobias Fickinger
	 * Erstellungsdatum: 17.04.07
	 * Letzte Änderung: 23.04.07
	 * Beschreibung des Moduls: Hauptprogramm zur Anzeige eines simplen Fensters ohne Ereignisse. Methoden werden größtenteils aus der Klasse FensterElemente bezogen
	 * Paket: fenster (zusammen mit: FensterElemente.java)
	 */
	public static void main(String[] args) {
		// Instanzierung des Fensterobjekts
		ReservierungsFenster fensterobjekt = new ReservierungsFenster();
		// Sichtbarkeit festlegen
		Menu menu = new Menu();
		fensterobjekt.setJMenuBar(menu.setMenuBar());
		fensterobjekt.setVisible(true);
	}	
}

class ReservierungsFenster extends JFrame{
	private static final long serialVersionUID = 1L;
	public JTextField nameField;
	public JTextField emailField;
	public JButton buttonOK;
	
	// Konstruktoren
	
	public ReservierungsFenster(){
		// Konstruktoraufruf mit Parameter für Titelname des Fensters
		this("Platzreservierung");
	}
	
	public ReservierungsFenster( String titel ){
		super(titel);
		setSize(420,400);
		
		//Elemente holen
		FensterElemente element = new FensterElemente();

		// Gridbaglayout holen
		
	    GridBagLayout gbl = new GridBagLayout();
	    GridBagConstraints constr = new GridBagConstraints();

	    // ContentPane holen
	    
	    Container cpane = this.getContentPane();
	    cpane.setLayout (new BorderLayout());
	    
	    // Panels holen und mit GridBagLayout versehen

	    JPanel topPanel = new JPanel();
	    JPanel downPanel = new JPanel ();
	    topPanel.setLayout(gbl);
	    downPanel.setLayout(gbl);
	    
	    // Panel "oben" mit Elementen aus der Klasse FensterElemente füllen
	    
	    //JLabel erstellen
	    constr.gridx = 1;	//Spalte
	    constr.gridy = 0;	//Zeile
	    constr.anchor = GridBagConstraints.CENTER;	    
	    topPanel.add(element.createJLabel("Sitzplatzreservierung"), constr);
	    
	    //JLabel erstellen
	    constr.gridx = 0;
	    constr.gridy = 1;
	    constr.anchor = GridBagConstraints.EAST;
	    topPanel.add(element.createJLabel("Name"), constr);
	    
	    //TextField erstellen
	    constr.gridx = 1;
	    constr.gridy = 1;
	    constr.anchor = GridBagConstraints.EAST;
	    nameField = element.createTextField(20);
	    topPanel.add(nameField, constr);	    
	    
	    //JLabel erstellen
	    constr.gridx = 0;
	    constr.gridy = 2;
	    constr.anchor = GridBagConstraints.EAST;
	    topPanel.add(element.createJLabel("Email"), constr);	    

	    //TextField erstellen
	    constr.gridx = 1;
	    constr.gridy = 2;
	    constr.anchor = GridBagConstraints.EAST;
	    emailField = element.createTextField(20);
	    topPanel.add(emailField, constr);
	    
	    //Button erstellen
	    constr.gridx = 2;
	    constr.gridy = 3;
	    constr.anchor = GridBagConstraints.WEST;
	    buttonOK = element.createButton("OK");
	    topPanel.add(buttonOK, constr);
	    EventHandling bl = new EventHandling(); 
	    buttonOK.addActionListener(bl);	    

	    //TextArea erstellen
	    constr.gridx = 1;
	    constr.gridy = 4;
	    constr.anchor = GridBagConstraints.CENTER;
	    topPanel.add(element.createTextArea(3,19), constr);  

	    //Panel "unten" mit Elementen aus der Klasse FensterElemente füllen

	    //RadioButtons erstellen
	    constr.gridx = 0;
	    constr.gridy = 1;
	    constr.anchor = GridBagConstraints.WEST;
	    String[] title = new String[]{"Raucher", "Nichtraucher"};
	    boolean[] active = new boolean[]{ true, false};
	    downPanel.add(element.createRadioButtons(title, active), constr);

	    //ComboBox erstellen
	    constr.gridx = 1;
	    constr.gridy = 1;
	    constr.anchor = GridBagConstraints.NORTHWEST;
	    String[] content = new String[]{"Fensterplatz","Mittelgang","Loge","Schlafplatz"};
	    downPanel.add(element.createComboBox(content), constr);
	    
	    //Leeres JLabel erstellen
        constr.gridx = 2;
        constr.gridy = 1;
        constr.anchor = GridBagConstraints.WEST;
        downPanel.add(element.createEmptyJLabel(30), constr);	    

        //Checkboxen erstellen
	    constr.gridx = 3;
	    constr.gridy = 1;
	    constr.anchor = GridBagConstraints.EAST;
	    constr.gridwidth = GridBagConstraints.REMAINDER;
	    String[] inhalt = new String[]{"Handgepäck","Koffer"};
	    boolean[] status = new boolean[]{false,true};
	    downPanel.add(element.createCheckBox(inhalt,status), constr);
	    
	    //Leeres JLabel erstellen
        constr.gridx = 0;
        constr.gridy = 2;
        constr.anchor = GridBagConstraints.WEST;
        downPanel.add(element.createEmptyJLabel(30), constr);
        
	    //Leeres JLabel erstellen
        constr.gridx = 0;
        constr.gridy = 3;
        constr.anchor = GridBagConstraints.WEST;
        downPanel.add(element.createEmptyJLabel(30), constr);
        
	    //Leeres JLabel erstellen
        constr.gridx = 0;
        constr.gridy = 4;
        constr.anchor = GridBagConstraints.WEST;        
        downPanel.add(element.createEmptyJLabel(30), constr);        
    
	    
	    // fertige topPanel und downPanel auf cpane legen
	    cpane.add(topPanel, BorderLayout.NORTH);
        cpane.add(downPanel, BorderLayout.SOUTH); 
	}
	class EventHandling implements ActionListener{
		public void actionPerformed(ActionEvent event){
			Object source = event.getSource();
			
			/*if(source == buttonOK){
				String contentEmailField = emailField.getText();
				String contentNameField = nameField.getText();
				System.out.println("Name: " + contentNameField +
									"\nEmail: " + contentEmailField);	 
			}*/
			if(source == buttonOK){
				FileDialog dialog = new FileDialog(this, "Datei laden...",FileDialog.LOAD);  
			    dialog.setSize(400, 100);   
			    dialog.show(); 
			}
			/*else if(source == ){
				
			}
			else if(source == ){
				
			}*/
		}	
	}
}//Ende der Klasse ReservierungsFenster

Menu.java:

Code:
package listener;

import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;

import listener.ReservierungsFenster.EventHandling;

public class Menu extends JMenuBar{
		public Menu(){
			
		}
		
		public JMenuBar setMenuBar(){
			ReservierungsFenster rF = new ReservierungsFenster();
			// Menüleiste erzeugen
			JMenuBar menuBar = new JMenuBar();

			JMenu menu1 = new JMenu("Datei");
			JMenuItem oeffnen = new JMenuItem("Öffnen");
			menu1.add(oeffnen);
			EventHandling bl = rF.new EventHandling(); 
		    oeffnen.addActionListener(bl);
			menu1.add(new JMenuItem("Sichern"));
			menu1.add(new JMenuItem("Beenden"));
			// Menü zur Menüleiste hinzufügen
			menuBar.add(menu1);

			JMenu menu2 = new JMenu("look&feel");
			menu2.add(new JMenuItem("Windows"));
			menu2.add(new JMenuItem("Metal"));
			menu2.add(new JMenuItem("Motif"));
			// Menü zur Menüleiste hinzufügen
			menuBar.add(menu2);
			
			JMenu menu3 = new JMenu("Info");
			menu3.add(new JMenuItem("Autor"));
			menu3.add(new JMenuItem("Help"));
			// Menü zur Menüleiste hinzufügen
			menuBar.add(menu3);			

			// Menüleiste setzen
			//getRootPane().setJMenuBar(menuBar);
			return menuBar;
		}
}
 
Zum einem solltest du deiner Klasse Menu die entsprechende Klasse übergeben welche das Eventhandling übernehmen soll, d.h. in deinem Fall ja das Reservierungsfenster.
Gib deiner Fensterklasse noch eine Get-Methode für den Eventhandler damit du dann aus der Klasse Menu darauf verweisen kannst.

Dem ersten Parameter des FileDialog gibst du ein null.

Fenster.java
Code:
	public static void main(String[] args) {
		// Instanzierung des Fensterobjekts
		ReservierungsFenster fensterobjekt = new ReservierungsFenster();
		// Sichtbarkeit festlegen
		Menu menu = new Menu(fensterObject);
		fensterobjekt.setJMenuBar(menu.setMenuBar());
		fensterobjekt.setVisible(true);
	}	
...
			if(source == buttonOK){
				FileDialog dialog = new FileDialog(null, "Datei laden...",FileDialog.LOAD);

Menu.java
Code:
public class Menu extends JMenuBar{
		

                        private JFrame fenster;
                        public Menu(JFrame fenster){
			this.fenster = fenster
		}
		
		public JMenuBar setMenuBar(){
			
			// Menüleiste erzeugen
			JMenuBar menuBar = new JMenuBar();

			JMenu menu1 = new JMenu("Datei");
			JMenuItem oeffnen = new JMenuItem("Öffnen");
			menu1.add(oeffnen); 
		    oeffnen.addActionListener(fenster.getEventHandling());
			menu1.add(new JMenuItem("Sichern"));
			menu1.add(new JMenuItem("Beenden"));
			// Menü zur Menüleiste hinzufügen
			menuBar.add(menu1);
...
 
Zurück