nicht-statische Inhalte auf statische Inhalte verweisen

Status
Nicht offen für weitere Antworten.
O

OutOfBounds

Gast
Ich grüße euch,

ich steht vor einem kleinen Problem was ich euch anhand code snippets von mir darstellen möchte:

Code:
public static void createGUI(){
	
        final JFrame f = new JFrame("Analyzer");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(display);
        f.getContentPane().setLayout(new FlowLayout());
        f.setSize(display.getHeight(), display.getWidth());
        f.pack();
        f.setVisible(true);       
	}


public void addMenu(JFrame f){
		
		/* Sets the menubar */
        f.setMenuBar(this);
        Menu fileMenu = new Menu("Datei");
        Menu fileMenu2 = new Menu("Bearbeiten");
        Menu fileMenu3 = new Menu("Info");
        add(fileMenu);
        add(fileMenu2);
        add(fileMenu3);

//noch mehr code - ist jedoch hier nicht relevant

}


public static void main(String[] args) {
		
                Interface i = new Interface();

		i.addMenu(f);         // <== Hier ist "f" nicht einsetzbar 

		display = new PerformanceProfile();

		javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                createGUI();              
                   }
                });
}

Nur zur Problematik :

Ich habe ein JFrame in einer statischen Methode erstellt (ja es muss leider static sein - gründe liegen in unserer Projektorganisation)

Analog zu diesem JFrame würde ich gerne noch eine MenuBar erstellen - dies liegt in einer "normalen" void methode. Wie bekomme ich es nun hin die Menubar zu diesem JFrame zu erstellen - ich habe hierbei primär Probleme damit statischen Inhalt auf nicht-statischen Inhalt (der Menubar) zu verweisen ?

danke schonmal im vorraus für Hints oder Denkansätze

OutOfBounds
 
B

bygones

Gast
(ja es muss leider static sein - gründe liegen in unserer Projektorganisation)
na dann gratulation zu dieser Projektorganisation... *kopfschüttel*

einfachste Lösung:

alles static machen und sich über das Ergebnis freuen....
 
G

Guest

Gast
"Herzlichen Dank" von meiner Seite aus - diese Gratulation darfst du nun neun mal (aber bitte nicht öfter) noch machen ^^

Ich würde zudem gerne alles auf static setzten, doch bei Menubar geht es nicht - sprich diesen Block:

Code:
public void addMenu(JFrame f){
      
      /* Sets the menubar */
        f.setMenuBar(this);
        Menu fileMenu = new Menu("Datei");
        Menu fileMenu2 = new Menu("Bearbeiten");
        Menu fileMenu3 = new Menu("Info");
        add(fileMenu);
        add(fileMenu2);
        add(fileMenu3);

//noch mehr code - ist jedoch hier nicht relevant

}

kann man nicht einfach in static umschreiben - da add(fileMenu); & co aus einem non-static Bereich hervorgehen.
 
B

bygones

Gast
9X Gratulation

kannst du mal die Klasse posten - was für eine Klasse ist das - eine die von JMenuBar erbt ?

dann krausts mich noch mehr - warum einen static frame darin definieren - bitte erklär mir - es muss ein Sinn haben ....
 

Mag1c

Top Contributor
Hi,

erzeuge eine Instanz und rufe addMenu daran auf und übergib das Frame. Wenn du nicht mehrmals eine Instanz erzeugen willst, mach ein Singleton draus.

Gruß
Mag1c
 
O

OutOfBounds

Gast
@deathbyaclown

kann die ganze klasse leider nicht posten zumindest jetzt nicht - ich versuche morgen mit den Kollegen mich abzusprechen.

@Mag1c

Dies hört sich sehr gut an - doch in wiefern eine Instanz erzeugen ? Ich komme da noch nicht ganz mit
 
B

bygones

Gast
OutOfBounds hat gesagt.:
Dies hört sich sehr gut an - doch in wiefern eine Instanz erzeugen ? Ich komme da noch nicht ganz mit
hihi - nun versteh ich warum static wenn du nicht weißt wie eine Instanz erzeugen :)

Instanzen werden per new erzeugt
also
Code:
List eineListe = new ArrayList();
somit hast du eine Instanz einer ArrayList erzeugt. Mit dieser Instanz kannst du dann auf methoden der Klasse zugrifen

edit:
.
Code:
Interface i = new Interface();
hier habt ihr doch eine Instanz erzeugt ?!

ich tipp mal wieder so ins Blaue was ihr machen wollt bzw. geb mal n tipp ab.

Das ganze soll eine Gui werden - Interface ist irgendeine Klasse, die ihr zum anzeigen verwendet wollt (schließlich willst du darin dein menu haben). Bitte überlegt euch euer Design noch 1, 2x.

Z.b. macht eine Klasse (z.b. Interface) die von JFrame erbt. Somit könnt ihr diese dann als Hauptklasse für die GUI ansehen. in dieser Klasse könnt ihr dann z.b. eine Methode (nicht static *g) haben, die euch ein Menu erstellt.....
 
O

OutOfBounds

Gast
*lol* sehr schön - die Problematik ist nicht "wie" eine Instanz erzeugen - sondern "wovon" ? :D
 
B

bygones

Gast
OutOfBounds hat gesagt.:
*lol* sehr schön - die Problematik ist nicht "wie" eine Instanz erzeugen - sondern "wovon" ? :D
eine Instanz der Klasse die du z.T. gepostet hast, da ja addMenu eine Methode dieser Klasse ist
 
G

Guest

Gast
erzeuge eine Instanz und rufe addMenu daran auf und übergib das Frame. Wenn du nicht mehrmals eine Instanz erzeugen willst, mach ein Singleton draus.

Ich hab eine Instanz von der Klasse - und ich habe daran addMenu aufgerufen und dem als Parameter das Frame übergeben - oder versteh ich das jetzt völlig falsch ? *noch mehr verwirrt sei*

Code:
public static void main(String[] args) {
		Interface i = new Interface();  //<== Instanz erzeugt
		i.addMenu(f);                         //<== addMenu aufgerufen und als Parameter JFrame f übergeben
}
 

Mag1c

Top Contributor
Hi,

also die static-Geschichte ist eigentlich was Besonderes was man nur aus ganz bestimmten (Projekt- :lol: ) Gründen einsetzt. Da ich nicht weiß, wie deine Klasse heißt, denk ich mir mal eine aus:

Code:
public class ProjektMenu extends JMenuBar {
  public void addMenu (JFrame f) {
     /* Sets the menubar */
     f.setMenuBar(this);
     Menu fileMenu = new Menu("Datei");
     Menu fileMenu2 = new Menu("Bearbeiten");
     Menu fileMenu3 = new Menu("Info");
     add(fileMenu);
     add(fileMenu2);
     add(fileMenu3); 
    //noch mehr code - ist jedoch hier nicht relevant 
  }
}

in der static-Methode kann das dann so verwendet werden:

Code:
public static void createGUI () {
    final JFrame f = new JFrame("Analyzer");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(display);
    f.getContentPane().setLayout(new FlowLayout());
    f.setSize(display.getHeight(), display.getWidth());

    // und jetzt das Menu
    ProjektMenu menu = new ProjektMenu();
    menu.addMenu(f);

    f.pack();
    f.setVisible(true);
}

und wenn ich mir das so anschaue, würde ich dir empfehlen, das leicht abzuwandeln, und zwar so:

Code:
public class ProjektMenu extends JMenuBar {
  public ProjektMenu () {
    createMenu();
  }

  public void createMenu () {
     Menu fileMenu = new Menu("Datei");
     Menu fileMenu2 = new Menu("Bearbeiten");
     Menu fileMenu3 = new Menu("Info");
     add(fileMenu);
     add(fileMenu2);
     add(fileMenu3); 
    //noch mehr code - ist jedoch hier nicht relevant 
  }
}

das ist nun das reine Menu ohne Bezug auf irgendein Frame. Der kommt dann hier:

Code:
public static void createGUI () {
    final JFrame f = new JFrame("Analyzer");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(display);
    f.getContentPane().setLayout(new FlowLayout());
    f.setSize(display.getHeight(), display.getWidth());

    // und jetzt das Menu
    ProjektMenu menu = new ProjektMenu();
    f.setMenuBar(menu);

    f.pack();
    f.setVisible(true);
}

Gruß
Mag1c
 
O

OutOfBounds

Gast
Herzlichen Dank, das war genau das i-Tüpfelchen -

1. Danke für die schnellen Antworten von deathbyaclown und Mag1c

und

2. Danke für den hint wie man es besser strukturieren kann

3. Danke für die aufgebrachte Zeit - hier geht alles nur husch husch ... zeit für Erklärungen untereinander nimmt man sich kaum.
 
O

OutOfBounds

Gast
Grüße,

dank eurer Hilfe konnte ich diverse weitere Probleme lösen, doch nun steh ich vor einem Problem welches ich nicht so leicht lösen kann.

basierend auf die methode:

Code:
public static void createGUI () {
    final JFrame f = new JFrame("Analyzer");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    ProjektMenu menu = new ProjektMenu();
    f.setMenuBar(menu);

    f.pack();
    f.setVisible(true);
}

hab ich noch eine methode


Code:
public void saveFile(JFrame f){
        FileDialog fd = new FileDialog(f, "Save File",
                FileDialog.SAVE);
        fd.show(); // Display dialog and wait for response  

// --einige try-catch komponenten die für das Problem nicht relevant sind
	}


Nun hab ich noch die methode "ActionPerformed" vom actionListener

Code:
public void actionPerformed(ActionEvent e){		

        if (e.getActionCommand()=="WLA"){
           saveFile(f); //<== Problem 
        }   

    }

Der ActionListener bzw. die methode ActionPerformed dient dazu um beim klicken auf ein MenuItem den Speicher Dialog zu öffnen.

Nun besteht genau hierbei das Problem, das ich in der methode actionPerformed nicht "saveFile(f)" schreiben kann, da JFrame f in der methode nicht bekannt ist - wie ist es möglich dennoch einen erfolgreichen Verweis in actionPerformed auf JFrame zu machen ?
 

Illuvatar

Top Contributor
Wo ist denn das actionPerformed ist das ne eigene Klasse dann solltest du das im Konstruktor übergeben ist das die gleiche Klasse kannst du this verwenden.

Hab ich sowas nicht heute schon mal geschrieben ???:L
 
O

OutOfBounds

Gast
actionPerformed ist eine methode von ActionListener innerhalb der Klasse "Interface" (entschuldigung das ich das net miterwähnt habe !)

das würde bei der Klasse dann so aussehen:
Code:
public class Interface implements ActionListener{

public void actionPerformed(ActionEvent e){

 5
 6
 7
 8
 9

	

public void actionPerformed(ActionEvent e){      

        if (e.getActionCommand()=="WLA"){
           saveFile(f); //<== Problem
        }  

}

}

Das Problem ist das (f) sprich das JFrame leider als unbekannt in der methode actionPerformed galt

und wenn ich "this.saveFile(f);" steht dann "f cannot be resolved"
 

Sky

Top Contributor
Nur mal so zur Info:
Code:
if (e.getActionCommand()=="WLA"){
Guck doch mal in der FAQ zum Thema "Stringvergleiche".
 
O

OutOfBounds

Gast
Auch wenn es nicht zur Lösung des Problems führt, so danke ich dennoch Sky - war doch aufschlussreich !

Nun weiß ich das es "if ("wla".equals(e.getActionCommand())){" heißt und hab es entsprechend editiert ^^
 
O

OutOfBounds

Gast
So, ich habe nun versucht JFrame f welches nur in der methode

public static void createGUI () vorliegt nun als Attribut in der Klasse Interface anzugeben -

private JFrame f;

Wenn ich dies mache verschwindet der Fehler bei actionPerformed
this.saveFile(f) - doch es erscheint im Gegenzug dann folgende Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: null owner window
at java.awt.Window.ownedInit(Unknown Source)
at java.awt.Window.<init>(Unknown Source)
at java.awt.Dialog.<init>(Unknown Source)
at java.awt.FileDialog.<init>(Unknown Source)
at Interface.saveFile(Interface.java:133)
at Interface.actionPerformed(Interface.java:157)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at

...restliche Verweise ausgelassen

bei Interface.saveFile(Interface.java:133)
zeigt es auf
FileDialog fd = new FileDialog(f, "Save File",FileDialog.SAVE);

und bei

at Interface.actionPerformed(Interface.java:157) zeigt es auf

this.saveFile(f)
 

Mag1c

Top Contributor
Hi,

mach die Variable static und ändere in createGUI():

Code:
f = new JFrame("Analyzer");

Gruß
Mag1c
 
O

OutOfBounds

Gast
Heiliger Strohsack :eek: ...und ich hab die variable auf private gestellt *hand_vor_stirn_knall* herzlichen dank nochmal - dies ist eines dieser Fehler gewesen die ich nicht so schnell vergessen werde ^^
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Queiser Nicht statische Klassen Java Basics - Anfänger-Themen 6
B Statische Methode return funktioniert nicht. Java Basics - Anfänger-Themen 19
C nicht statische Methoden Java Basics - Anfänger-Themen 4
R Methoden Nicht statische Methode aus Main aufrufen Java Basics - Anfänger-Themen 2
S Datentypen nicht lineare STATISCHE Datenstruktur? Java Basics - Anfänger-Themen 10
A Nicht-statische Methode in einer statischen aufrufen Java Basics - Anfänger-Themen 10
J Unterschied zwischen statische und nicht statische Methoden? Java Basics - Anfänger-Themen 14
E Statische Member können nicht vererbt werden? Java Basics - Anfänger-Themen 10
M Statische und nicht-statische Funktionen: Desktop.browse(uri); Java Basics - Anfänger-Themen 4
K nicht-statische Methode aufrufen Java Basics - Anfänger-Themen 3
T in statischem Kontext auf nicht statische Variable beziehen Java Basics - Anfänger-Themen 5
M öffentliche nicht-statische Funktion fremder Klasse ausführn Java Basics - Anfänger-Themen 16
P nicht statische methode instantiieren Java Basics - Anfänger-Themen 7
F Statische Methode - Nicht Statische Methode Java Basics - Anfänger-Themen 10
D Statische und Nicht-Statische Methoden Java Basics - Anfänger-Themen 7
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
J Meine Mails gehen nicht raus Java Basics - Anfänger-Themen 8
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
S Ist JDK jetzt free oder nicht? Java Basics - Anfänger-Themen 5
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
M JButton setBackground() färbt nicht den ganzen Knopf Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben