Aus dem menü heraus andere Felder bearbeiten

Status
Nicht offen für weitere Antworten.

AbbaGern

Neues Mitglied
Hi,

um bisschen zu basteln und Java, hier besonders swing, zu lernen, habe ich mir ein Programm geschrieben, dass ein Fenster öffnet mit menü und textfelder und Buttons. Später soll das mal ein kleiner Taschenrechner werden.

Ich habe das Fenster, das Layout und das Menü für die Übersicht in verschieden Klassen eingeteilt.

In der Klasse Menue steht nun z.B. u.a.

ActionListener printListener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println("MenuItem [" + event.getActionCommand()+ "] was pressed");
if (event.getActionCommand()=="Beenden"){
System.exit(0);
}
}
};

Das funktioniert auch einwandfrei. Nun will ich aber auch, wenn man im Menü auf Neu klickt, dass dann 2 gewisse Textfelder gelöscht werden, die in der Klasse Fenster definiert wurden.
Leider finde ich kein gutes Beispiel im netz, dass mir das zeigt.

Wenn ihr mir ein primitives Beispiel geben könntet oder ihr mir Tips zu meinem Code geben könntet, wäre ich sehr verbunden. 8)

Hier mein Code:

Code:
--- Fenster.java ---


package packtest;

import packtest.GridBag;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Fenster {	
	int laenge;
	int hoehe;
	int xpos, ypos;
	JFrame frame;

	public Fenster(int laenge, int hoehe, int xpos, int ypos) {
		this.laenge = laenge;
		this.hoehe = hoehe;	
		this.xpos = xpos;
		this.ypos = ypos;
	}
	public Fenster(int laenge, int hoehe) {
		this(laenge,hoehe,10,10);
	}
	
	public void openwindow(String titel) {
		JFrame frame = new JFrame(titel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        frame.setBounds(this.xpos,this.ypos,this.laenge,this.hoehe);
        frame.setResizable(true);
        Container c = frame.getContentPane();
        
        GridBagLayout gbl = new GridBagLayout();
        c.setLayout(gbl);
        
        JTextField tf = new JTextField();
        GridBag.addComponent( c, gbl, tf, 0, 0, 1, 1, 0, 0 );
        JButton b = new JButton( "Ende" );
        GridBag.addComponent( c, gbl, b, 0, 1, 1, 1, 0, 0 );   
  
        ActionListener al = new ActionListener() {
            public void actionPerformed( ActionEvent e ) {
                System.exit( 0 );
              }
        };
        frame.setJMenuBar(new Menue());       
        b.addActionListener( al );
        b.setBounds(10,10,50,50);
        frame.setVisible(true);
        
	}
	
	public void closewindow() {
		this.frame.setVisible(false);
		this.frame.dispose();	
	}

}
Code:
--- Menue.java ---


package packtest;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Menue extends JMenuBar{
  String[] fileItems = new String[] {"Neu", "Öffnen", "Laden", "Beenden"};
  String[] editItems = new String[] {"Kopieren", "Einfügen", "Ausschneiden"};
  
  char[] fileshortcuts = new char[] {'N', 'O', 'L', 'B'};
  char[] editshortcuts = new char[] {'K', 'E', 'A'};
  
  public Menue() { 
  
  JMenu fileMenu = new JMenu("Datei");
  JMenu editMenu = new JMenu("Bearbeiten");
  JMenu subMenu = new JMenu("subMenu");
  JMenu subMenu2 = new JMenu("subMenu");
  
  ActionListener printListener = new ActionListener() {
  	public void actionPerformed(ActionEvent event) {
  		System.out.println("MenuItem [" + event.getActionCommand()+ "] was pressed");
  	    if (event.getActionCommand()=="Beenden"){
  	    	System.exit(0);
  	    }
  	}
  };
  
  for (int j=0;j<fileItems.length;j++) {
  	JMenuItem item = new JMenuItem(fileItems[j]);
  	item.addActionListener(printListener);
  	fileMenu.add(item); 
  }
  
  for (int i=0;i<editItems.length;i++) {
  	JMenuItem item = new JMenuItem(editItems[i]);
  	item.setAccelerator(KeyStroke.getKeyStroke(editshortcuts[i],Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(),false));
  	item.addActionListener(printListener);
  	editMenu.add(item);
  }
  add(fileMenu);
  add(editMenu);
  }
  
}

Falls die Frage noch nicht ganz klar sein sollte, ich möchte also z.B. wenn man im menü auf Neu klickt, dass dann der Inhalt vom TextField tf geleert wird. Auf tf.setText(""); reagiert er klarerweise mit tf can not be resolved.

Die Klasse GridBagLayout lasse ich hier mal weg, da sie einwandfrei funktioniert und das ja auch net meine Frage ist.
edited by thE_29: Code Tags weg!
 
Mach halt in der Klasse Fenster eine Methode die, dier die Felder löscht... ???:L
Menu muss dann halt das Fenster Objekt kennen...
 
Kannst du das vielleicht nochmal genauer erläutern.

Mein gedankliches Problem liegt einfach in deinem 2ten Satz.

Wie bring ich dem ActionListener vom Menü bei, über welches Fenster-Objekt er reagieren muss. Im grunde ist es ja sein eigenes Fenster, aber ich weiss einfach nicht, wie ich z.B. ein textField oder meinetwegen eine Methode zum Objekt fenster aus dem ActionListener ansprechen soll.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben