Swing Anwendung von LayeredPanel

Pitergann

Mitglied
Hey,

Ich habe gerade ein Problem damit Anwendungen von Layered Panels zu Implementieren. Wollte mir eine Methode erstellen um zwischen einzelnen Panels zu wechseln diese erkennt jedoch die Anwendungen aus JLayeredPanel nicht an was kann ich tun oder wo ist mein Denkfehler?
ich mache das alles in Eclipse 2023 und dem Windowbuilder, auf meinem Windows 10 PC

vielen dank schon mal für die Hilfe


Java:
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.CardLayout;
import javax.swing.JButton;
import javax.swing.JLayeredPane;

public class Anwendung extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Anwendung frame = new Anwendung();
                    frame.setVisible(true);
                    frame.setTitle("Termin Vereinbarung");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    public void switchPanels (JPanel panel)
    {
        layeredPane.removeAll();  //hier tritt der fehler auf da "layeredPane." nicht erkannt wird
        layeredPane.add(panel);
        layeredPane.repaint();
        layeredPane.revalidate();
    }
   
    /**
     * Create the frame.
     */
    public Anwendung() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

        setContentPane(contentPane);
        contentPane.setLayout(null);
       
        JLayeredPane layeredPane = new JLayeredPane();
        layeredPane.setBounds(0, 0, 436, 263);
        contentPane.add(layeredPane);
       
        JPanel wilko = new JPanel();
        wilko.setBounds(0, 0, 435, 268);
        layeredPane.add(wilko);
       
        JPanel carInfo = new JPanel();
        carInfo.setBounds(0, 0, 433, 272);
        layeredPane.add(carInfo);
       
        JPanel kalender = new JPanel();
        kalender.setBounds(0, 0, 435, 268);
        layeredPane.add(kalender);
       
        JPanel kontakt = new JPanel();
        kontakt.setBounds(0, 0, 435, 268);
        layeredPane.add(kontakt);
       
        JPanel zsm = new JPanel();
        zsm.setBounds(0, 0, 435, 268);
        layeredPane.add(zsm);
 
Beste Antwort
Ok, Danke für die ausführliche Rückmeldung.

So wie ich das jetzt verstehe, liegt das Problem in dem Verständnis der möglichen Variablen "Typen" und deren Gültigkeitsbereiche.

Das, was Du da verwendest, sind lokale Variablen. Bei Lokalen Variablen handelt es sich um Variablen, die in einem Code Block deklariert werden und diese sind gültig ab der Deklaration bis zu dem Ende des aktuellen Blocks. (Evtl. noch der Hinweis: Lesend zugreifen kann man erst, sobald die Variable initialisiert wurde.)

Schematisch sieht das dann so aus (wenn man viel weglässt)
Java:
public class Anwendung extends JFrame {

    public Anwendung() {
    
        // Hier wird die lokale Variable layeredPane deklariert und initialisiert.
        JLayeredPane...

KonradN

Super-Moderator
Mitarbeiter
Also das erste große Problem: Was ist denn genau der Fehler? Du hast keine genaue Fehlerbeschreibung gegeben.
  • Hast Du dies nur vergessen?
  • Oder siehst Du die genaue Fehlermeldung nicht?

Die Fehlermeldung sollte klar sein. Die Variable layeredPane ist in der Methode unbekannt. Daher schau einmal: Wo deklarierst Du layeredPane? Was ist der Gültigkeitsbereich für diese Variable?

Dann ist das Umschalten auch falsch. Was du machst, ist alles zu löschen um dann nur eine Pane neu hinzu zu fügen. Dazu brauchst du dann keine JLayeredPane. Wenn Du die JLayeredPane nutzen willst, dann schau Dir doch einfach mal die Beschreibung der Klasse an: JLayeredPane (Java SE 17 & JDK 17) (oracle.com)
Dann wirst Du hoffentlich verstehen, was da die Layer Property macht, die man setzen könnte sowie die Methode moveToFront, die für Deine Zwecke vermutlich ausreichen dürfte.
 

Pitergann

Mitglied
Ja tut mit leid die habe ich vergessen zu so später stunde. die Fehlermeldung war, dass diese Anwendung nicht zugeordnet werden kann. was vermutlich daran lag, dass die Methode Außerhalb der Klasse Anwendung liegt in welcher die LayeredPane implementiert ist.
Vielen dank für den Tipp mit der Methode moveToFront, dies würde mir den ganzen spaß erheblich vereinfachen. Im Grunde möchte ich nur mit einem JButton welcher in Panel 1(wilko)liegt, von eben diesem Panel1 auf das Panel 2(carInfo) umschalten.
Doch auch mit dieser Methode Stoße ich wieder auf das Problem, dass es das Objekt carInfo anscheinend nicht erkennen kann, nach Implementierung der Methode in einen JButton mit actionListener. Ist das Vielleicht gar nicht möglich?

Java:
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.CardLayout;
import javax.swing.JButton;
import javax.swing.JLayeredPane;

public class Anwendung extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Anwendung frame = new Anwendung();
                    frame.setVisible(true);
                    frame.setTitle("Termin Vereinbarung");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
    /**
     * Create the frame.
     */
    public Anwendung() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        JLayeredPane layeredPane = new JLayeredPane();
        layeredPane.setBounds(0, 0, 436, 263);
        contentPane.add(layeredPane);
        
        JPanel wilko = new JPanel();
        wilko.setBounds(0, 0, 435, 268);
        layeredPane.add(wilko);
        wilko.setLayout(null);
        
        JButton btnNext = new JButton("New button");
        btnNext.setBounds(169, 125, 89, 23);
        wilko.add(btnNext);
        
        btnNext.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                public void moveToFront(carInfo);  /*Fehlermeldung in dieser Zeile
                                                    "Syntax error on token "moveToFront",
                                                     = expected after this token"
                                                    */
            }
            
        });
        
        JPanel carInfo = new JPanel();
        carInfo.setBounds(0, 0, 433, 272);
        layeredPane.add(carInfo);
        
        JPanel kalender = new JPanel();
        kalender.setBounds(0, 0, 435, 268);
        layeredPane.add(kalender);
        
        JPanel kontakt = new JPanel();
        kontakt.setBounds(0, 0, 435, 268);
        layeredPane.add(kontakt);
        
        JPanel zsm = new JPanel();
        zsm.setBounds(0, 0, 435, 268);
        layeredPane.add(zsm);
        
        
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
Ok, Danke für die ausführliche Rückmeldung.

So wie ich das jetzt verstehe, liegt das Problem in dem Verständnis der möglichen Variablen "Typen" und deren Gültigkeitsbereiche.

Das, was Du da verwendest, sind lokale Variablen. Bei Lokalen Variablen handelt es sich um Variablen, die in einem Code Block deklariert werden und diese sind gültig ab der Deklaration bis zu dem Ende des aktuellen Blocks. (Evtl. noch der Hinweis: Lesend zugreifen kann man erst, sobald die Variable initialisiert wurde.)

Schematisch sieht das dann so aus (wenn man viel weglässt)
Java:
public class Anwendung extends JFrame {

    public Anwendung() {
    
        // Hier wird die lokale Variable layeredPane deklariert und initialisiert.
        JLayeredPane layeredPane = new JLayeredPane();

    } // Hier endet der Block und damit die Gültigkeit der Variable layeredPane
}

Damit ist die Variable layeredPane nur in dem Konstruktor verfügbar.

Da Du die Variable aber auch in anderen Methoden nutzen willst, kannst Du die Variable als Instanzvariable deklarieren. Dann sieht das so aus:

Java:
public class Anwendung extends JFrame {

    private JPanel contentPane; // Dies ist eine Instanzvariable. Diese ist bei allen Instanzen von Anwendung verfügbar.

    public Anwendung() {

        // Hier wird die Variable initialisiert.
        // Wichtig: Du hast vor contentPane keinen Typ stehen, daher wird keine neue
        //          lokale Variable deklariert sondern die oben deklarierte Instanzvariable genutzt.
        contentPane = new JPanel();
        
    }
}

Was Du also machen kannst:
Alle Variablen, die Du innerhalb der Instanz mehrfach benutzen willst, deklarierst Du als Instanzvariablen. Also zu der contentPane kommen alle anderen Variablen Deklarationen wie die von layeredPane und Du entfernst den Typ bei der Initialisierung:

Java:
public class Anwendung extends JFrame {

    private JPanel contentPane; 
    private JLayeredPane layeredPane;
    public Anwendung() {

        // Hier ist kein JLayeredPane mehr:
        layeredPane = new JLayeredPane();
        
    }
}

Das kannst Du mit allen Variablen machen, die generell für die Instanz wichtig sind oder sein könnten.

Ich hoffe, dass dies die Problematik etwas erklärt hat. Zu dem Thema finden sich ansonsten auch noch massiv Erklärungen im Internet. Wenn Das gewünscht ist, dann einfach mal nach "Java lokale Variablen" und "Java Instanzvariablen" suchen. Das dürfte einige Treffer bringen.

Ansonsten natürlich auch gerne einfach erneut nachfragen. (Ich habe die Problematik vielleicht missverstanden oder Du brauchst noch andere / weitere Erklärungen.)
 
Beste Antwort

Pitergann

Mitglied
KonradN vielen lieben dank, dass hat mir alles sehr geholfen und es läuft endlich so wie es soll, und es auch noch simpler gemacht. Du kriegst auf alle fälle einer Erwähnung bei der Präsentation bei meinen Profs. Da du es geschafft hast mir das zu erklären, was eigentlich deren Aufgabe war. Vielen dank für die schnellen und ausführlichen Antworten.
Grüße Pitergann
(P.s. Im echten Leben ebenfalls Konrad :D )
 

KonradN

Super-Moderator
Mitarbeiter
Erst einmal freue ich mich, dass ich Dir helfen konnte.

Bei der Erwähnung aber ggf. aufpassen und eher drauf verzichten:
  • Wenn jemand kritisiert wird, dann hat das direkt Einfluß auf Sympathie und Co. Also auch unbewusst kannst Du Dir damit ggf. eine Bewertung verschlechtern
  • Im Studium wird erwartet, dass Studenten auch Eigeninitiative zeigen. Und wenn ich an mein Studium zurück denke, dann war es da immer eine Herausforderung, Alles mitzuschreiben. (Einige Professoren haben Scripte verteilt, aber das war nicht die große Masse damals. Aber das war super, da man dann besser zuhören und lediglich Anmerkungen im Skript vermerken musste.)
  • Aus wissenschaftlicher Sicht sind Quellen natürlich anzugeben. Aber das ist jetzt nichts, das irgend eine wissenschaftliche oder künstlerische "Schaffenshöhe" hätte und daher erwähnt werden müsste.

Daher evtl. den Punkt noch einmal überdenken. Ich will Dir da aber nicht rein reden und natürlich freuen wir uns, wenn Du in Gesprächen z.B. mit Kommilitonen das Forum erwähnst. Wir freuen uns über jeden User :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Hänger in Anwendung (war: An KonradN) AWT, Swing, JavaFX & SWT 3
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
thor_norsk JavaFX Anwendung stürzt ab AWT, Swing, JavaFX & SWT 4
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
G JavaFX Steuerung bzw. Test von externer JavaFX Anwendung (liegt nur als jar vor) AWT, Swing, JavaFX & SWT 9
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
B JavaFX Wie A4-Seite in meiner Anwendung repräsentieren AWT, Swing, JavaFX & SWT 6
B JavaFX JavaFX Anwendung deployen (entw als runnableJAR oder exe-Datei) AWT, Swing, JavaFX & SWT 15
OSchriever Anwendung aus SystemTray öffnen AWT, Swing, JavaFX & SWT 29
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
T Anwendung mit X schliessen AWT, Swing, JavaFX & SWT 1
L JavaFX OpenJFX13 Anwendung exportieren AWT, Swing, JavaFX & SWT 7
D PDF Viewer in SWT-Anwendung AWT, Swing, JavaFX & SWT 8
O Basics - Anwendung erstellen mit mehreren Szenen AWT, Swing, JavaFX & SWT 1
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
A JavaFX Anwendung in Jar Datei AWT, Swing, JavaFX & SWT 8
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
J Splashscreen Start Anwendung AWT, Swing, JavaFX & SWT 14
MiMa Programmeinstellungen für Anwendung?? AWT, Swing, JavaFX & SWT 54
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
I JFileChooser mit System L&F bei anderem L&F der eigtl. Anwendung AWT, Swing, JavaFX & SWT 0
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
L JavaFX PdfViewer für JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
D JafaFX Anwendung beenden AWT, Swing, JavaFX & SWT 11
B Wie erstelle ich eine JavaFX Anwendung von diesem Code? AWT, Swing, JavaFX & SWT 3
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
X Anwendung skalierbar AWT, Swing, JavaFX & SWT 3
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
D JavaFX Anwendung hängt sich permanent auf AWT, Swing, JavaFX & SWT 6
L JavaFX Java FX Anwendung nach MVC mit Observer Pattern AWT, Swing, JavaFX & SWT 15
X Swing Anwendung regaiert auf keine Buttons mehr wärend while(scanner.hasNextLine()) ausgeführt wird. AWT, Swing, JavaFX & SWT 4
I Variabeln speichern in Desktop Anwendung AWT, Swing, JavaFX & SWT 2
V Anwendung im Vollbild zentrieren AWT, Swing, JavaFX & SWT 13
A Swing Textübergabe innerhalb der Anwendung in unterschiedlichen Fenster AWT, Swing, JavaFX & SWT 8
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
J JavaFX Anwendung läuft in eclipse, nicht aber exportiert AWT, Swing, JavaFX & SWT 2
P Anwendung kommt nach minimieren nicht mehr in den Vordergrund AWT, Swing, JavaFX & SWT 5
K 3D-Grafik Anwendung von Java in Gnuplot AWT, Swing, JavaFX & SWT 3
M SWT Anwendung in der Symbolleiste verstecken AWT, Swing, JavaFX & SWT 5
B SWT Redesign SWT Anwendung AWT, Swing, JavaFX & SWT 7
M Java anwendung VOR vollbildspielen (schon wieder...) AWT, Swing, JavaFX & SWT 5
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
VfL_Freak Swing Zweiter Monitor von Java-Anwendung ansprechbar ?? AWT, Swing, JavaFX & SWT 2
S Swing Ist meine gute Java Anwendung vorgängig? AWT, Swing, JavaFX & SWT 20
P Klassenaufbau bei komplexerer GUI Anwendung AWT, Swing, JavaFX & SWT 14
S Java GUI Anwendung ohne Konsole starten AWT, Swing, JavaFX & SWT 6
qwerqer Swing Anwendung soll blinken (Taskleiste) AWT, Swing, JavaFX & SWT 3
R Java Desktop Anwendung erstellen. Womit? AWT, Swing, JavaFX & SWT 3
eLogic Fullscreen anwendung aus der man nicht rauskommt AWT, Swing, JavaFX & SWT 37
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
H Anwendung schließen ohne System.exit AWT, Swing, JavaFX & SWT 5
R Anwendung ohne Symbol in der Taskleiste AWT, Swing, JavaFX & SWT 3
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
alderwaran Swing XML editor plugin für eigene anwendung AWT, Swing, JavaFX & SWT 2
G Swing Update-Funktion für Swing-Anwendung AWT, Swing, JavaFX & SWT 5
C Swing Eine SWING-Anwendung mittels MVC AWT, Swing, JavaFX & SWT 4
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
B SWT Hello World-Anwendung mit GUI in Eclipse -Problem mit Import von SWT AWT, Swing, JavaFX & SWT 9
G Applet und Swing Anwendung AWT, Swing, JavaFX & SWT 2
J Client Server Anwendung - Mehrere Clients in einer Server GUI AWT, Swing, JavaFX & SWT 11
F Anwendung auf Teskleiste legen AWT, Swing, JavaFX & SWT 3
B MDI Anwendung alle maximierten InternalFrames in Tabs AWT, Swing, JavaFX & SWT 3
T Anwendung starten AWT, Swing, JavaFX & SWT 5
J Anwendung von Swing nach SWT bzw. Eclipse portieren AWT, Swing, JavaFX & SWT 3
2 Tablet-PC Java-Anwendung -> Tablet-Pen Problem !! AWT, Swing, JavaFX & SWT 3
J Swing Anwendung schließen im Listener AWT, Swing, JavaFX & SWT 3
isowiz Vorteil einer RCP Anwendung gegenüber Swing AWT, Swing, JavaFX & SWT 3
? Java-SWT-Anwendung in der Taskleiste nicht sichtbar AWT, Swing, JavaFX & SWT 6
H Netbeans-Anwendung schliessen AWT, Swing, JavaFX & SWT 8
M "Billig Excel" Anwendung mit Swing - Aufwand ? AWT, Swing, JavaFX & SWT 4
G "Views-Abwechseln-Pro " in RCP-Anwendung AWT, Swing, JavaFX & SWT 2
H PopUp-Fenster in einer Java Server Faces Anwendung AWT, Swing, JavaFX & SWT 4
T Auf Fenster innerhalb der Anwendung zugreifen-auch elegant? AWT, Swing, JavaFX & SWT 2
G Organisation Anwendung mit mehreren Eingabedialogen AWT, Swing, JavaFX & SWT 3
H JWindow schließen bei einem Klick außerhalb der Anwendung? AWT, Swing, JavaFX & SWT 19
G SWT DatePicker funzt nicht in eigener Anwendung AWT, Swing, JavaFX & SWT 5
E Bestehende Anwendung erweitern ->JFrame in JPanel verpack AWT, Swing, JavaFX & SWT 4
U Anwendung nicht beenden beim form schliessen? AWT, Swing, JavaFX & SWT 6
T "Echte" MDI Anwendung AWT, Swing, JavaFX & SWT 4
G Auf markierten Text einer anderen Anwendung zugreifen. AWT, Swing, JavaFX & SWT 8
G Relativer Pfad in Rich Client Anwendung AWT, Swing, JavaFX & SWT 4
N Keyboard-Shortcut, der in der ganzen Anwendung funktioniert AWT, Swing, JavaFX & SWT 2
D JDIC Browser in SWT/JFace Anwendung nutzen AWT, Swing, JavaFX & SWT 2
J Swing-Anwendung mit ActionListener AWT, Swing, JavaFX & SWT 7
S Anwendung über Button beenden? AWT, Swing, JavaFX & SWT 4
O Anwendung aus dem Programm heraus neu starten AWT, Swing, JavaFX & SWT 2
U Anwendung mit mehreren "Fenstern" AWT, Swing, JavaFX & SWT 4
R Screenshot von fremder Anwendung AWT, Swing, JavaFX & SWT 4
Hotkey Freie Icons für Anwendung mit Java Look&Feel AWT, Swing, JavaFX & SWT 4
S SWT-Anwendung als startfähiges Jar unter Linux AWT, Swing, JavaFX & SWT 4
P GUI geschickt von dem Rest der Anwendung trennen AWT, Swing, JavaFX & SWT 6
S HTML-Datei in Anwendung (JEditorPane) AWT, Swing, JavaFX & SWT 5
A Screenshot einer Anwendung erstellen AWT, Swing, JavaFX & SWT 14
A MVC-Pattern - Kreuzweise Anwendung? AWT, Swing, JavaFX & SWT 4
M Komponenten einer Anwendung in JTree strukturiert auflisten? AWT, Swing, JavaFX & SWT 4
G Anwendung um Scrollpane erweitern AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben