wie auf Fenster-Items zugreifen?

klaussp

Grünschnabel
Hallo,

ich habe eine Klasse die ein Fenster anlegt samt diverser Checkboxen und Textfelder, und habe eine 2. Klasse die dem Fenster ein Menü hinzufügt.
Nun möchte ich den Speichern-Dialog der aus der menü-Klasse gerufen wird die Werte der Elemente des Fensters das mit der fenster-klasse erzeugt wird auslesen lassen?

Aber wie greife ich dann auf diese Elemente zu?
HILFE

Grüße Klaus
 
Hallo,

wie wärs mit einem minimalen Codebeispiel damit sich manchereiner sich darunter was vorstellen können :) !


Vg Erdal
 
ok, war wohl nicht so klar zu erkennen was ich will?! sorry.

ich versuchs nochmal; insgesamt 3 klassen

1. Klasse: MenueLeiste.java

Hier soll der Speichern Dialog Werte aus der Klasse SwingFenster.java auslesen, die eine Oberfläche aufbaut. Wie greife ich aber auf die Elemente der Klasse SwingFenster zu? Wie lese ich z. B. den Wert von taKommentar (Kommentar - TextArea)

Code:
// --- Klasse MenuLeiste -----------------------------------
package gui;

import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

class MenueLeiste extends JMenuBar{	


	//	ProgrammInfo
	String autor = "";
	String version = "1.0";
	String versionsdatum = "27.04.2007";	
	
	private static final long serialVersionUID = 1L;

		JMenu  				// PullDownMenu 
			mnuFile = new JMenu("Datei"),
			mnuLaF = new JMenu("Look & Feel"),
			mnuInfo = new JMenu("Info");
			
		JMenuItem
			mniFileOpen	= new JMenuItem("Öffnen"),
			mniFileSave	= new JMenuItem("Sichern"),
			mniEnde		= new JMenuItem("Beenden"); 
	
		JMenuItem
			mniWindows	= new JMenuItem("Windows"),
			mniMetal	= new JMenuItem("Metal"),
			mniMotiv	= new JMenuItem("Motiv"); 
		 	
		 JMenuItem
		 	mniAutor		= new JMenuItem("Autor"),
		 	mniHilfe		= new JMenuItem("Hilfe");
		 		
		 SwingFenster 
		 	fenster = null;
		 
		 
    // Konstruktor
	public MenueLeiste(JFrame frame){ 
			
		fenster = (SwingFenster) frame;
		
		System.out.println("Konstruktor MenueLeiste");
	
		// -----------------------------------------------
		mnuFile.add( mniFileOpen );	// Item auf PulldownMenu legen
		mnuFile.add( mniFileSave );	// Item auf PulldownMenu legen
		mnuFile.addSeparator();
		mnuFile.add( mniEnde );		// Item auf PulldownMenu legen
		
		// Listener anbinden ------------------------
   		mniFileOpen.addActionListener(new ActionDatei());
   	 	mniFileSave.addActionListener(new ActionDatei());
   	 	mniEnde.addActionListener(new ActionDatei());  
			     	
   	 	// -----------------------------------------------  
   	 	mnuLaF.add( mniWindows );	// Item auf PulldownMenu legen
   	 	mnuLaF.add( mniMetal );	// Item auf PulldownMenu legen
   		mnuLaF.add( mniMotiv );	// Item auf PulldownMenu legen
        
		// Listener anbinden ------------------------
   		mniWindows.addActionListener(new ActionLaF());
   		mniMetal.addActionListener(new ActionLaF());
   		mniMotiv.addActionListener(new ActionLaF());
	 	
   		mnuInfo.add(mniAutor);
   		mnuInfo.add(mniHilfe);
   		
   		// Listener anbinden ------------------------
   		mniAutor.addActionListener(new ActionInfo());
   		mniHilfe.addActionListener(new ActionInfo());
  		
		// -----------------------------------------------  
   		// PullDownMenü's auf MenuLeiste legen
		this.add( mnuFile );	 
		this.add( mnuLaF );	
		this.add( mnuInfo );
            
	}// end of constructor 

	//------------- ActionListener Interface --------------------
	class ActionDatei implements ActionListener{
		
		public void actionPerformed ( ActionEvent event){
			//Object source = event.getSource();
			
			//Befehlsstring auswerten und auf Konsole ausgeben
			String cmd = event.getActionCommand();
			System.out.println("Aufruf im Menü Datei -> " + cmd);
		
			// Fallunterscheidung & Aufruf einer Fenstermethode
			if (cmd.equals("Öffnen")){
				FileDialog fdOpen = new FileDialog(fenster,"Datei öffnen",FileDialog.LOAD);
				fdOpen.setVisible(true);
				// Dateinamen übernehmen
				String dateiname= fdOpen.getFile();
				String dateipfad= fdOpen.getDirectory();
				
				System.out.println("Öffne Datei " + dateipfad + dateiname);
				
			}else if (cmd.equals("Sichern")){
			FileDialog fdSichern = new FileDialog(fenster,"Datei sichern",FileDialog.SAVE);
			fdSichern.setVisible(true);

			//Dateinamen übernehmen
			String dateiname= fdSichern.getFile();
			String dateipfad= fdSichern.getDirectory();
			
			//nur Speichern wenn Dateiname angegeben wurde
			if (dateiname != ""){
				System.out.println("Speichere Datei als " + dateipfad + dateiname);
				String inhalt = new String();
				System.out.println();				
				
			};
			
			
			}else if (cmd.equals("Beenden")){
			System.exit(0);
			}
		}
		}//end of ActionDatei

	class ActionLaF implements ActionListener{
		
		public void actionPerformed ( ActionEvent event){
			Object source = event.getSource();
			
			String cmd = event.getActionCommand();
			System.out.println("Look and Feel wurde angefordert: " + cmd);
		
			// Fallunterscheidung & Aufruf einer Fenstermethode
			if (cmd.equals("Windows")){
			fenster.updateLAF("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			}else if (cmd.equals("Metal")){
			fenster.updateLAF("javax.swing.plaf.metal.MetalLookAndFeel");			
			}else if (cmd.equals("Motiv")){
			fenster.updateLAF("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
			}
		}
	}//end of ActionLaF
		
		class ActionInfo implements ActionListener{
			
			public void actionPerformed ( ActionEvent event){
				//Object source = event.getSource();
				
				String cmd = event.getActionCommand();
				System.out.println("Aufruf im Menü Info -> " + cmd);
			
				// Fallunterscheidung & Aufruf einer Fenstermethode
				if (cmd.equals("Autor")){
				JOptionPane.showMessageDialog(fenster,"Autor: \n\n" + autor + "\nVersion "+ version + "\n\n"+versionsdatum);
				}else if (cmd.equals("Hilfe")){
					JOptionPane.showMessageDialog(fenster,"Hilfetexte \n\n ...coming soon");
				}
			}//end of actionPerformed
			}//end of ActionInfo
}// class MenueLeiste

2. Klasse: SwingFenster.java
Code:
package gui;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class SwingFenster extends JFrame{
	private static final long serialVersionUID = 1L;

	// Instanz- oder Membervariablen

    
	// Konstruktoren
	public SwingFenster(){  	// Default-Konstruktor
	
		// Aufruf des Konstruktors mit Parametern
		this("Swing Fenster");
	}
	
	public SwingFenster( String titel ){ // Konstruktor mit Parameter
		
		// Aufruf des Konstruktors der Oberklasse
		super(titel);		

		System.out.println("Programmstart");
		
		// Menuleiste hinzufügen -----------
		// ---------------------------------
		this.setJMenuBar(new MenueLeiste(this));
		// ---------------------------------
		
		
		//ContentPane holen
		Container cpane = this.getContentPane();
		
		//Layoutmanager einbinden (GridBagLayout)
		GridBagLayout gridbag = new GridBagLayout();
		GridBagConstraints constr = new GridBagConstraints();
		cpane.setLayout(gridbag);		
		
		//Label Titel
		JLabel labelTitel = new JLabel("Sitzplatzreservierung");
		labelTitel.setHorizontalTextPosition(JLabel.CENTER);
		constr.gridx=1; //Spalte
		constr.gridy=1; //Zeile
		gridbag.setConstraints(labelTitel, constr);
		cpane.add(labelTitel);
		
		//Label + Textfeld Name
		JLabel labName = new JLabel("Name: ");
		constr.anchor = GridBagConstraints.LINE_END;
		constr.gridx=0;
		constr.gridy=2;
		gridbag.setConstraints(labName, constr);
		cpane.add(labName);
		
		final JTextField tfName = new JTextField("",20);
		constr.gridx=1;
		constr.gridy=2;
		gridbag.setConstraints(tfName, constr);
		cpane.add(tfName);
		
		
		//Label + Textfeld eMail		
		JLabel labEmail = new JLabel("Email: ");
		constr.gridx=0;
		constr.gridy=3;
		gridbag.setConstraints(labEmail, constr);
		cpane.add(labEmail);
		
		final JTextField tfEmail = new JTextField("",20);
		constr.gridx=1;
		constr.gridy=3;
		gridbag.setConstraints(tfEmail, constr);
		cpane.add(tfEmail);
		
		
		//alle weiteren Elemente am Beginn der Zellen ausrichten
		constr.anchor = GridBagConstraints.LINE_START;
		
		//Schaltfläche OK
		JButton butOK = new JButton("ok");
		butOK.addActionListener(new ActionListener()
		{
		public void actionPerformed(ActionEvent e)
			{
			System.out.println("OK - Button gedrückt\n"+"Name: " + tfName.getText()+"\neMail: " + tfEmail.getText());
			}
		});
		constr.gridx=2;
		constr.gridy=4;
		//butOK.setPreferredSize(new Dimension(60, 25));
		butOK.setForeground(Color.BLUE);
		butOK.setToolTipText("gibt Werte auf der Console aus!");
		gridbag.setConstraints(butOK,constr);
		cpane.add(butOK);

		//Leerzeile
		JLabel labLeer = new JLabel(" ");
		constr.gridx=0;
		constr.gridy=5;
		gridbag.setConstraints(labLeer, constr);
		cpane.add(labLeer,constr);
		
		
		//Textarea in Scrollpane
		final JTextArea taKommentar = new JTextArea(null,"Das ist eine JTextArea. Hier kann man beliebig lange Kommentare einfügen.",10,20);
		taKommentar.setLineWrap(true); 		//Umbruch
		taKommentar.setWrapStyleWord(true); //Umbruch immer erst nach Wort

		//JScrollPane erzeugen und JTextArea drauflegen
		JScrollPane scrollPane = new JScrollPane(taKommentar);
		
		//positionieren und auf Cpane holen
		constr.gridx=1;
		constr.gridy=10;
		gridbag.setConstraints(scrollPane,constr);
		cpane.add(scrollPane);
		
		//Leerzeile (leeres Label)
		JLabel labLeer1 = new JLabel(" ");
		constr.gridx=0;
		constr.gridy=11;
		gridbag.setConstraints(labLeer1, constr);
		cpane.add(labLeer1,constr);
		
		//Radiobutton Raucher
		JRadioButton rbRaucher = new JRadioButton("Raucher");
		constr.gridx=0;
		constr.gridy=20;
		gridbag.setConstraints(rbRaucher,constr);
		cpane.add(rbRaucher);		
		
		//Radiobutton Nichtraucher
		JRadioButton rbNichtRaucher = new JRadioButton("Nichtraucher");
		constr.gridx=0;
		constr.gridy=21;
		gridbag.setConstraints(rbNichtRaucher,constr);
		cpane.add(rbNichtRaucher);
		
		//Radiobuttons gruppieren (nur eins kann geklickt werden!)
		ButtonGroup rbGroup = new ButtonGroup();
		rbGroup.add( rbRaucher ); rbGroup.add( rbNichtRaucher );
		
		//JComboBox
	    String[] auswahl = {"Fensterplatz", "Mittelplatz"};
		JComboBox cbPlatz = new JComboBox(auswahl);
		constr.gridx=1;
		constr.gridy=20;
		gridbag.setConstraints(cbPlatz,constr);
		cpane.add(cbPlatz);

		//JCheckBox
		JCheckBox cb1 = new JCheckBox("Handgepäck", false );
		constr.gridx=2;
		constr.gridy=20;
		gridbag.setConstraints(cb1,constr);
		cpane.add(cb1);
		
		JCheckBox cb2 = new JCheckBox("Koffer", true );
		constr.gridx=2;
		constr.gridy=21;
		gridbag.setConstraints(cb2,constr);
		cpane.add(cb2);

		this.pack(); //Fenstergröße anhand der Komponenten definieren!
		
	}// end of constructor
	
	// eigene Methoden
	 /** 
	   * Update look and feel 
	   * @param lafStyle (String) = 
	   * "javax.swing.plaf.metal.MetalLookAndFeel",
	   * "com.sun.java.swing.plaf.motif.MotifLookAndFeel",
	   * "com.sun.java.swing.plaf.windows.WindowsLookAndFeel",
	   */
	   void updateLAF(String lafStyle){
	   	System.out.println("updateLAF = " + lafStyle);
	   
	   	try{ 
	   		UIManager.setLookAndFeel( lafStyle );
	   		SwingUtilities.updateComponentTreeUI( this ); 
	   	}
	   	catch(Exception ex){
	   		System.out.println("Fehler beim L&F " + ex.getMessage());
	   	} 
	   	this.pack(); // alles schön packen
	   } 
	   
	   void leseItems(){
		   System.out.println("LeseItems");		   
	   }
		
	// innere Klassen
	
}// end of class SwingFenster
 
Zuletzt bearbeitet:
Moin!
Nun, so wie man sonst auch auf Variablen und Methoden einer anderen Klasse zugreift:

Skizze:
Code:
public class SwingFenster{
...
private JTextArea taKommentar = null;
...

   public SwingFenster(String title){
      ...
      ...
     taKommentar = new JTextArea(null,"text",10,20);
     taKommentar.setLineWrap(true); 		//Umbruch
     taKommentar.setWrapStyleWord(true); //Umbruch immer erst nach Wort
  }
  public String getKommentar(){
     return taKommentar.getText();
  }

}

Code:
public class MenueLeiste{

   public MenueLeiste(SwingFenster f){
      fenster = f;
      ....
      ....
   }
   private void aMethod(){
     String text = fenster.getKommentar();
    }

...
}


*grüssle*
MeinerEiner
 
Zurück