Zum Inhalt springen

JFrame globaler zugriff


Mage3000

Empfohlene Beiträge

Hallo,

ich arbeite an einem Programm zur Datenmanipulation, es sollen Dateien geladen werden über eine Auswahlbox, verändert und wieder gespeichert werden.

Mein Problem sind nun die JFrames bzw. das JFrame.

Damit das Programm übersichtlich bleibt ist es in mehrere Klassen geteilt.

Mein Hauptprogramm erzeugt also ein Fenster und ruft die erste Klasse auf.In dieser Klasse wird eine JMenuBar erzeugt mit Items, desweiteren werden dort die Konstruktoren einiger anderen Klassen aufgerufen die das aktuelle JFrame erhalten, da diese Klassen auch mit dem JFrame arbeiten.

Mein Problem ist nun, das das ganze Programm scheinbar nicht mit nur einem Frame arbeitet, sondern versucht auf ein 2 bzw. 3 zuzugreifen.

------------------------

import javax.swing.*;

public class Hauptprog{

/**

* @param args

*/

public static final Menufenster Fenster = new Menufenster();

public static void main(String[] args) {

Fenster.pack();

Fenster.setSize(1000,700);

Fenster.setVisible(true);

}

}

-----------------

public Menufenster(){

super("mein prog");

addWindowListener(new WindowClosingAdapter(true));

menubar();

eigenschaften = new Ausgabe(this);

erstellen = new Button(this);

edit = new Bearbeiten(this);

erstellen.Buttonlayout();

}

-------

Wie bekomm ich es hin, das ich ein globales Hauptframe habe, auf das ich von jeder beliebigen Klasse aus zugreifen kann ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

public class Hauptprog{

	/**

	 * @param args

	 */

		public static void main(String[] args) {


	        Menufenster Fenster = new Menufenster();  <-- Objekt Erzeugung

	   	Fenster.pack();

		Fenster.setSize(1000,700);

		Fenster.setVisible(true);

}

}
import java.awt.*;

import java.awt.event.*;

import javax.swing.*;


public class Menufenster 

extends JFrame

{


	/**

	 * 

	 */

	private static final long serialVersionUID = -5662524236639740802L;


	private JMenuBar Menubar;

	private JMenu menu1,menu2,menu3,menu4;

	private JMenuItem item_load,item_save,item_exit,item_edit;


	/**

	 * @param args

	 */


	public Menufenster(){


		super("mein prog");

	       	addWindowListener(new WindowClosingAdapter(true));


	      menubar();  


	}
public void menubar(){


		 ActionListener listener = new ActionAdapter(this);

		 Menubar = new JMenuBar(); 

	     menu1 = new JMenu("Datei");

	     menu2 = new JMenu("Bearbeiten");

	     menu3 = new JMenu("Ansicht");

	     menu4 = new JMenu("Hilfe");

	     item_load = new JMenuItem("Datei laden..." ,'l');

	     setCtrlAccelerator(item_load, 'L');

	     item_save = new JMenuItem("Datei speichern...", 's');

	     setCtrlAccelerator(item_save, 'S');

	     item_exit = new JMenuItem("Beenden", 'B');

	     setCtrlAccelerator(item_exit, 'B');

	     item_edit = new JMenuItem("Audiodatei",'A');

	     setCtrlAccelerator(item_edit, 'A');

	     menu1.setMnemonic('D');

	     menu2.setMnemonic('B');

	     menu3.setMnemonic('A');

	     menu4.setMnemonic('H');

	     menu1.add(item_load);

	     menu1.add(item_save);

	     menu1.addSeparator();

	     menu1.add(item_exit);

	     Menubar.add(menu1);

	     menu2.add(item_edit);

	     Menubar.add(menu2);

	     Menubar.add(menu3);

	     Menubar.add(menu4);


	     Menubar.setBorder(BorderFactory.createEtchedBorder());

	     getContentPane().add(Menubar, BorderLayout.NORTH);


	     item_load.addActionListener(listener);

	     item_exit.addActionListener(listener);

	     item_save.addActionListener(listener);

	     item_edit.addActionListener(listener);


	}

hier mal der komplette Quelltext zur ersten Klasse..das Objekt Fenster was im Hauptprog erstellt wird, wird ja meines erachtens ja von JFrame abgleitet.Im Detail passiert dies in der Klasse Menufenster...

Das funktioniert ja auch alles soweit.Die Frage ist halt nur ob das so ok ist, wenn ich global auf dieses erzeugte JFrame zugreifen will ? Bzw. was müsste ich vielleicht anders machen ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

public class Hauptprog{

	/**

	 * @param args

	 */

		public static void main(String[] args) {


	        Menufenster Fenster = new Menufenster();  <-- Objekt Erzeugung

	   	Fenster.pack();

		Fenster.setSize(1000,700);

		Fenster.setVisible(true);

}

}

Lokale Variable. Darauf wirst du nicht mit Standardmitteln zugreifen können.

Also entweder du übergibst es als Parameter, deklarierst die Klasse als Singleton oder machst einen static member in den Launchen.

Ich persönlich bin für Ersteres.

Link zu diesem Kommentar
Auf anderen Seiten teilen


import javax.swing.*;


public class Hauptprog{



	/**

	 * @param args

	 */


	public static void main(String[] args) {


	        Menufenster Fenster = new Menufenster();	

	   	new Button(Fenster);

	   	new Ausgabe(Fenster);

	   	new ActionAdapter(Fenster);

	        Fenster.pack();

		Fenster.setSize(1000,700);

		Fenster.setVisible(true);


	}

}

Also müsste ich das so machen nehm ich an...Mein Problem ist jetzt der ActionAdapter...der wird zweimal aufgerufen...einmal wie oben im Menufenster und einmal in der Klasse Button...Ich habe einmal datei laden im Menufenster und einmal als Button am unteren teil des JFrames. Wenn ich jetzt über datei laden mittels button gehe dann macht der alles wunderbar....es öffnet sich eine auswahlbox in der ich meine datei auswählen kann...dann ok drücken und die datei steht mit ihrem quellpfad in meiner liste...drück ich jetzt nochmal den button datei laden, so wird dieses JList Fenster wieder gelöscht, so wie ers machen soll. Der Hacken ist jetzt aber, wenn ich einmal über den button lade und danach über den menü eintrag "datei laden" gehe dann tut er dies nicht...es hat den anschein als würden sich das alte fenster und das neue überlappen...und das soll nicht sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Warum mischst du AWT und Swing?!

Warum lässt du nicht alle Unterobjekte (menubar, Buttons, ...) gleich im JFrame erzeugen?!

Da bräuchtest du von außen auch keinen AL auf die Unterelemente zu instanziieren, sondern machst das ein mal im Konstruktor.

Wenn du zwei (oder mehr) Aktionlistener erzeugst, werden bei einem Event alle benachrichtigt, dass ist dann klar, dass es zu einer doppelten Ausführung kommen kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...