In main erzeugtes objekt zugreifen.

johndoesplan

Mitglied
Hallo zusammen, ich werkel momentan an einer kleinen App und es funktioniert alles soweit, nur habe ich da eine Frage die mich seit 2 Tagen verfolgt.

Und zwar habe ich zwei JFrame Klassen die mir 2 unterschiedliche Objekt Fenster für die App erzeugen, hier:

Java:
public class Fenster extends JFrame implements ActionListener {

    JButton b1, b2;
    JTextField t1;
    JPanel p1, p2;
    Fenster fenstor;
    

    public Fenster() {

        setSize(500, 150);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setTitle("Meine Bibliothek");
        setResizable(false);

        b1 = new JButton("Buch hinzufügen");
        b2 = new JButton("Bibliothek");

        b1.setPreferredSize(new Dimension(150, 50));
        b2.setPreferredSize(new Dimension(305, 50));

        b1.addActionListener(this);
        b1.setActionCommand("button1");
        b2.addActionListener(this);
        b2.setActionCommand("button2");

        t1 = new JTextField("Buch!");
        t1.setPreferredSize(new Dimension(150, 50));
        Font font = new Font("Verdana", Font.HANGING_BASELINE, 20);
        t1.setFont(font);

        p1 = new JPanel();
        p2 = new JPanel();

        p1.add(b1);
        p1.add(t1);
        p2.add(b2);

        add(p1, BorderLayout.WEST);
        add(p2, BorderLayout.SOUTH);
        pack();

        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if (e.getActionCommand() == "button2") {
            // ausführung für button 2

            this.setVisible(false);
            Bibliotheksfenster bf = new Bibliotheksfenster();

        }
        if (e.getActionCommand() == "button1") {
            // asusführung für button 1

        }

    }

    public void visibleFenster() {
        setVisible(true);

    }

}

und hier:


Java:
public class Bibliotheksfenster extends JFrame implements ActionListener {

    JButton b1;
    JPanel p1;

    public Bibliotheksfenster() {

        super("Meine Bibliothek");
        setSize(400, 800);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(false);

        b1 = new JButton();
        b1.addActionListener(this);
        b1.setPreferredSize(new Dimension(100, 100));

        p1 = new JPanel();
        p1.add(b1);

        add(p1, BorderLayout.SOUTH);
        //pack(); später packen

        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        // neue frames werden erstellet anstatt im alten objekt zu arbeiten.
        // System.out.println(mainfenster.toString());
        // mainfenster.setVisible(true);
        this.setVisible(false);
        Fenster mainfenster = new Fenster();

        // mainfenster.visibleFenster();

    }

}


Java:
public class buchmain {

    public static void main(String[] args) {
        
        new Fenster();

Da ich ein Anfänger bin, habe ich sicherlich nicht den schönsten Code, bitte etwas Nachsicht. Meine Frage lautet jetzt wie folgt: Jedesmal wenn ich zwischen den Fenstern durch den JButton wechsel, erstellt mein Programm ein neues Objekt, ich würde aber gerne mit dem Objekt aus der main methode arbeiten. Also das Objekt aus der main sichtbar machen und unsichtbar machen bei bedarf und nicht immer ein neues erzeugen, falls das irgendwie Sinn ergibt. Momentan ist es ja so, dass die Objekte unnötigerweise im Hintergrund weiter laufen und das kommt mir irgendwie falsch vor.
Ich könnte das Obejkt in der Klasse als statisch erzeugen, aber das möchte ich auch nicht, weil das main Objekt ja trotzdem noch unsichtbar in der Luft hängen würde.

Bevor sich hier jemand aufregt, dass ich zuerst die Grundlagen lernen solle, möchte ich kurz erwähnen, dass mir durchaus bewusst ist, wie man auf Objekte zwischen Klassen zugreifen kann, indem man sie dort instanziert. Ich weiß auch, dass ich mehr mit private arbeiten sollte, anstatt alles public zu machen, aber das ganze mache ich aus Spaß und zur Übung, deshalb wollte ich vorerst alles public machen.


Ich hoffe die Experten unter euch konnten meine Frage einigermaßen verstehen. Danke aufjedenfall schon mal im Voraus

PS: Falls jemand Tipps für mich hat was die Struktur des Codes angeht usw. bin offen dafür und auch sehr dankbar !
 
Zuletzt bearbeitet:

Sogomn

Bekanntes Mitglied
Ich bin mir nicht sicher, ob ich das richtig verstanden habe.
An deiner Stelle würde ich eine Klasse zum Projekt hinzufügen, die von beiden Fenstern jeweils ein Objekt enthält. In dieser kannst du dann bequem die beiden Fenster sichbar / unsichbar machen, ohne neue Objekte zu erzeugen.
 
Zuletzt bearbeitet:

johndoesplan

Mitglied
Oh das ist eine gute Idee, aber wie Starte ich dann das Programm ? Ich hab dann ja immer noch ein unnötiges Objekt, das in der main Methode erstellt wurde und praktisch dann die ganze zeit unsichtbar ist.

Danke für die schnelle Antwort !
 

Sogomn

Bekanntes Mitglied
Anstatt in der main-Methode ein Objekt eines Fensters zu instanziieren, musst du dann natürlich ein neues Objekt deines FensterHandlers (oder wie auch immer du die Klasse nennen möchtest) erstellen. Ich versuch' mal, dir einen kleinen Beispielcode zu schreiben.
 
Zuletzt bearbeitet:

Sogomn

Bekanntes Mitglied
Java:
public class FensterEins extends JFrame {

   public FensterEins() {
      //...
   }

}

Java:
public class FensterZwei extends JFrame {

   public FensterZwei() {
      //...
   }

}

Java:
public class FensterHandler {

   private FensterEins eins;
   private FensterZwei zwei;

   public FensterHandler() {
      eins = new FensterEins();
      zwei = new FensterZwei();
      eins.setVisible(true);
      zwei.setVisible(false);
   }

   public static void main(String[] args) {
      new FensterHandler();
   }
}

Nur so ganz grob.
 

johndoesplan

Mitglied
Jetzt hab ichs verstanden, das sieht viel eleganter aus als mein gecode :p! Simpler Lösungsansatz, schade, dass ich nicht selbst drauf gekommen bin :/ Danke, jetzt kann ich weiter werklen *g*
 

Sogomn

Bekanntes Mitglied
Du hättest meinen Code vor einem halben Jahr mal sehen sollen! Schlimm war das. Das verbessert sich sehr schnell, einfach dranbleiben!
 

johndoesplan

Mitglied
Okay jetzt hatte ich endlich Zeit mich an den Code zu setzen und habe ein kleines Problem, wenn ich zb. auf das Objekt "eins" aus der Klasse FensterEins zugreifen möchte um setVisible auf true zu setzen,muss ich natürlich in der Klasse FensterEins im Konstruktor eine Instanz von FensterHandler erstellen. Wenn ich das jedoch mache, bekomme ich eine endlos schleife. Wie könnte man das sonst lösen ? Gibt es einen anderen Weg der Objekt Instanzierung oder übersehe ich da grad was ?
 

jgh

Top Contributor
bsp. indem du eine Referenz des "FensterHandlers" deinem Fenster1, Fenster2, FensterN mitgibst...
Java:
public class FensterHandler {

	private FensterEins eins;
	private FensterZwei zwei;

	public FensterEins getEins() {
		return eins;
	}

	public FensterZwei getZwei() {
		return zwei;
	}

	public FensterHandler() {
		eins = new FensterEins(this);
		zwei = new FensterZwei(this);
		eins.setVisible(true);
		zwei.setVisible(false);
	}

	public static void main(String[] args) {
		new FensterHandler();
	}
}

public class FensterZwei extends JFrame {
	private FensterHandler fh;

	public FensterZwei(FensterHandler fh) {

		this.fh = fh;
	}

}
 

arilou

Bekanntes Mitglied
Ansonsten natürlich das übliche:
* Strings vergleicht man nicht mit '==', sondern mit .equals(...)
* Bei den .add(...)-Aufrufen weist du 'BorderLayout'-Direktiven an, ohne dem Fenster einen BorderLayout-Manager gegeben zu haben. Soweit ich mich erinnere, ist als default ein 'FlowLayout' aktiv.
 

johndoesplan

Mitglied
Danke für die Tipps, alles klappt wunderbar! Ich hab den Fehler gemacht, nichts im Konstruktor übergeben zu haben, sondern hab einfach ein neues Objekt im Konstruktor erstellt und das hat eine Endlosschleife verursacht. Ist es üblich, dass man BorderLayout Manager mitgibt ? Ich schau mir jetzt mal BorderLayouts an.
 

jgh

Top Contributor
* Bei den .add(...)-Aufrufen weist du 'BorderLayout'-Direktiven an, ohne dem Fenster einen BorderLayout-Manager gegeben zu haben. Soweit ich mich erinnere, ist als default ein 'FlowLayout' aktiv.
Ist es üblich, dass man BorderLayout Manager mitgibt ?

das JFrame hat als Default-LayoutManager das BorderLayout, deswegen ist es genau so richtig, wie du deine Panels dem Frame addest, also mit der entsprechenden BorderLayoutDirektive
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
I Jetty starten von Programm (Main) Java Basics - Anfänger-Themen 27
Denix The public type Main must be defined in its own fileJava(16777541) Java Basics - Anfänger-Themen 13
D Array in Main Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
S Array über ein Ausgabemethode in main ausgeben Java Basics - Anfänger-Themen 31
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
N Wozu nutzt man in der Main Methode das args Array? Java Basics - Anfänger-Themen 10
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
H Warum kann man keine Parameter in die main-Methode packen? Java Basics - Anfänger-Themen 4
J In main() Datei geöffnet, von anderer Funktion beschreiben Java Basics - Anfänger-Themen 3
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
KogoroMori21 Methode in der main ausgeben Java Basics - Anfänger-Themen 2
s_1895 zu viele Zeilen in der Main Methode Java Basics - Anfänger-Themen 4
C Methodenrückgabe wird in der main nicht berücksichtigt Java Basics - Anfänger-Themen 2
B Wie kann ich etwas vor der Main-Methode ausführen? Java Basics - Anfänger-Themen 21
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
T Main startet nicht bei vorgegebenen Code Java Basics - Anfänger-Themen 41
G main Methode Java Basics - Anfänger-Themen 5
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
J main methode Java Basics - Anfänger-Themen 1
B No Main Classes Found Java Basics - Anfänger-Themen 7
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
E Was kommt in ein Objekt und was in die Main Methode? Java Basics - Anfänger-Themen 8
D java main methode kann nicht kompiliert werden (Erstellen eines Objekts) Java Basics - Anfänger-Themen 6
M String außerhalb der main-Methode Java Basics - Anfänger-Themen 4
scratchy1 ArrayOutOfBoundException in main-Methode Java Basics - Anfänger-Themen 17
B File öffnen in src/main/webapp Java Basics - Anfänger-Themen 4
P Parameterübergabe, von Methode zu Methode zu main Java Basics - Anfänger-Themen 4
J Kapselung Array in Set ändern und in Main ausgeben lassen Java Basics - Anfänger-Themen 4
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
D Compiler-Fehler Aufrufen einer Methode von Main Java Basics - Anfänger-Themen 4
G Was als main Method Java Basics - Anfänger-Themen 6
M Methode mit Array als Parameter an Main übergeben Java Basics - Anfänger-Themen 1
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
J Compiler-Fehler Java findet main Klasse nicht Java Basics - Anfänger-Themen 16
B Parameterübergabe in main Java Basics - Anfänger-Themen 1
A Variablen Main Klasse soll auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 3
I java.lang.ArrayIndexOutOfBoundsException at lösung.main Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
J Parameter in main verwenden Java Basics - Anfänger-Themen 3
M Methodenaufruf in der Main Datei funzt nicht Java Basics - Anfänger-Themen 13
M Maven Main-Methode Interface und Klasse Java Basics - Anfänger-Themen 2
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
G Instanzvariable in main-Methode verboten? Java Basics - Anfänger-Themen 3
M Objekt starten von der main-Methode Java Basics - Anfänger-Themen 1
S Fehler: Editor does not contain a main type Java Basics - Anfänger-Themen 3
G Programm wird nicht ausgeführt: Editor does not contain a main type Java Basics - Anfänger-Themen 10
A Methode aufrufen in main-Methode Java Basics - Anfänger-Themen 5
B Linux - Error: Could not find or load main class application.Main Java Basics - Anfänger-Themen 28
C Erste Schritte (Netbeans) no main classes found Java Basics - Anfänger-Themen 5
U Klassen IntelliJ14.1.1 Ultimate startet eine Main-Klasse NICHT MEHR Java Basics - Anfänger-Themen 0
P Methoden private int[] in main Java Basics - Anfänger-Themen 16
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
AssELAss Klassen Java Klasse in main-methode ausführen Java Basics - Anfänger-Themen 7
R Methoden Nicht statische Methode aus Main aufrufen Java Basics - Anfänger-Themen 2
P could not find main class obwohl da Java Basics - Anfänger-Themen 17
J Methode in main-Methode aufrufen Java Basics - Anfänger-Themen 5
B OOP Wie benutze ich die Main Funktion richtig? Java Basics - Anfänger-Themen 10
M Klassen Main Methode in einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 13
TheMenox Methoden Auslagerung von Code aus der "main" Methode sinnvoll? Java Basics - Anfänger-Themen 70
quecksilver if-Abfrage in main ausführen Java Basics - Anfänger-Themen 4
J Exception in thread "main" Java Basics - Anfänger-Themen 1
S Methode auf Main zugreifen Java Basics - Anfänger-Themen 5
D String aus Main in Klasse übergeben Java Basics - Anfänger-Themen 4
S Methoden main-Methode integrieren Java Basics - Anfänger-Themen 2
K Methoden Programm ohne Main Methode starten Java Basics - Anfänger-Themen 2
I Fehlermeldung: Java does not contain a main type Java Basics - Anfänger-Themen 1
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
F Erste Schritte (Gelöst) Anfängerfrage Arraylist ausserhalb der Main Methode Java Basics - Anfänger-Themen 2
N Variablen Variable in Main deklarieren und in anderer Methode nutzen Java Basics - Anfänger-Themen 12
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
R window-Klasse, main-loop und unausschaltbares anti-aliasing Java Basics - Anfänger-Themen 0
T Mehrere Methoden in der main-Methode verknüpfen und aufeinander anwenden Java Basics - Anfänger-Themen 2
P Compiler-Fehler Could not load or find main class fehler Java Basics - Anfänger-Themen 15
S Selection does not contain a main type! Java Basics - Anfänger-Themen 5
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
P Compiler-Fehler could not find or load main class Java Basics - Anfänger-Themen 5
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
U Umschreiben ohne main methode ;-) Java Basics - Anfänger-Themen 8
A Fehlermeldung beim aufruf der main Methode Java Basics - Anfänger-Themen 17
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
F Implementierung von Interfaces -> Problem mit main Java Basics - Anfänger-Themen 12
F Threads Variable aus einem Thread in main Methode? Java Basics - Anfänger-Themen 9
K Exception in thread "main" Java Basics - Anfänger-Themen 7
B Java Programm ohne statische Main Methode aufrufen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben