Mage3000 Geschrieben 13. Januar 2008 Teilen Geschrieben 13. Januar 2008 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 ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 13. Januar 2008 Teilen Geschrieben 13. Januar 2008 Wo ist die Ableitung von JFrame? Die Klasse, die das Hauptfenster erzeugt, sollte von JFrame abgeleitet sein. Sorry, ich werde nicht so ganz schlau aus Deinem Code Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mage3000 Geschrieben 13. Januar 2008 Autor Teilen Geschrieben 13. Januar 2008 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 ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 13. Januar 2008 Teilen Geschrieben 13. Januar 2008 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Menufenster extends JFrame { [....] public Menufenster(){ super(); addWindowListener(new WindowClosingAdapter(true)); menubar(); } Änder es mal bitte so ab Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mage3000 Geschrieben 13. Januar 2008 Autor Teilen Geschrieben 13. Januar 2008 Hab ich gemacht, aber das ändert nix am Programm...hab immernoch das Problem . Wie kann ich dieses JFrame jetzt so handhaben das es von jeder anderen Klassen benutzt werden kann.....und vorallem das nur genau das benutzt wird ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 13. Januar 2008 Teilen Geschrieben 13. Januar 2008 Übergebe im Konstruktor Deiner neuen Klasse einfach Deinen JFrame als Parameter Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 14. Januar 2008 Teilen Geschrieben 14. Januar 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mage3000 Geschrieben 14. Januar 2008 Autor Teilen Geschrieben 14. Januar 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 14. Januar 2008 Teilen Geschrieben 14. Januar 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mage3000 Geschrieben 14. Januar 2008 Autor Teilen Geschrieben 14. Januar 2008 Hmmm...klingt logisch also werd ich das mal bissl umbaun...die buttons und menubar in einer klasse unterbringen...dann hab ich nurnoch einen aktionlistener.. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 14. Januar 2008 Teilen Geschrieben 14. Januar 2008 Noch eine kleine Anmerkung zu der Frage mit dem Mischen: Nimm lieber JButton statt Button. java-forum.org - Warum nicht AWT und Swing mischen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mage3000 Geschrieben 14. Januar 2008 Autor Teilen Geschrieben 14. Januar 2008 Ah...jetzt weiß ich erstmal auf was du das bezogen hast :upps...Nicht verwirren lassen...das new Button ist nur meine Klasse in der ich dann aber JButtons erstelle Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mage3000 Geschrieben 14. Januar 2008 Autor Teilen Geschrieben 14. Januar 2008 Probelm gelöst...mit einem Actionadapter gehts besser und hatte meine Konstrukturen aufrufe in der falschen Klasse gesetzt...Dank an alle die sich mit meinem Problem auseinandergesetzt haben Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.