AWT JPanel zu Jframe hinzufügen

NoahL

Neues Mitglied
Hallo Zusammen, ich bin noch sehr neu in Java und wollte mich mal an einer GUI für einen Passwortspeicher versuchen. Ziel ist es verschiedene Panels in meinem Frame anzuzeigen, je nachdem welchen Button man klickt. Nur scheitere ich daran, die Panels zu meinem Frame hinzuzufügen.
LG
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.String;
import java.util.Base64;


//GUI für einen simplen Passwortspeicher

public class GUI1
{
    private JFrame frame;
    private JPanel login;
    private JPanel register;
    private JPanel finalP;
    private JPanel decide;
    private JPanel finalReg;
    private JPanel finalLog;
    public GUI1()
    {
        frame();
    }
    public void frame()
    {
        JFrame frame = new JFrame();
        frame.setTitle("Anmeldung");
        frame.setSize(500,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
        frame.setVisible(true);
        frame.add(decide);

    }
    
    public void decide()
    {
        //JPanel decide = new JPanel();
        JLabel logReg=new JLabel("login oder registrieren");
        decide.add(logReg);
        
        JButton button1 = new JButton("login");
        button1.addActionListener( new ActionListener ()
        {
            public void actionPerformed(ActionEvent e)
            {
                frame.add(login);
                decide.setVisible(false);
            }
        
        });
        decide.add(button1);
        
        JButton button2 = new JButton("register");
        button2.addActionListener( new ActionListener ()
        {
            public void actionPerformed(ActionEvent e)
            {
                register.setVisible(true);
                decide.setVisible(false);
            }
        
        });
        decide.add(button2);
        decide.setVisible(true);
    }
    
    public void login()
    {
        JPanel login = new JPanel();
        login.setLayout(new FlowLayout());
        login.setBackground( Color.decode("#808080"));

        
        JLabel unLabel=new JLabel("Username eingeben");
        login.add(unLabel);
        
        JTextField username=new JTextField();
        username.setPreferredSize(new Dimension(70,20));
        login.add(username);
        JButton log = new JButton("register");
        log.addActionListener( new ActionListener ()
        {
            public void actionPerformed(ActionEvent e)
            {
                frame.add(finalLog);
                login.setVisible(false);
            }
        
        });
        login.add(log);
        login.setVisible(true);
    }
    
    public void register()
    {
        JPanel register = new JPanel();
        JLabel pwLabel=new JLabel("Passwort eingeben");
        register.add(pwLabel);
        
        JPasswordField password=new JPasswordField();
        password.setPreferredSize(new Dimension(70,20));
        password.setEchoChar('*');
        register.add(password);
        JButton reg = new JButton("register");
        reg.addActionListener( new ActionListener ()
        {
            public void actionPerformed(ActionEvent e)
            {
                frame.add(finalReg);
                register.setVisible(false);
            }
        
        });
        register.add(reg);
        register.setVisible(true);
    }
    
    public void finalReg()
    {
        JPanel finalReg = new JPanel();
        finalReg.setLayout(new FlowLayout());
        finalReg.setBackground( Color.decode("#808080"));

        JLabel regLabel=new JLabel("Vielen Dank für den login");
        finalReg.add(regLabel);
        finalReg.setVisible(true);
    }
    
    public void finalLog()
    {
        JPanel finalLog = new JPanel();
        finalLog.setLayout(new FlowLayout());
        finalLog.setBackground( Color.decode("#808080"));
        
        JLabel logLabel=new JLabel("Vielen Dank für den login");
        finalLog.add(logLabel);
        finalLog.setVisible(true);
    }
    
}
 
Hallo! Du scheiterst daran, die Panels zu deinem Frame hinzuzufügen, weil du immer wieder neue Panels erstellst, anstatt die bereits erstellten Panels zu verwenden. Du solltest die Panels als Instanzvariablen deiner Klasse GUI1 definieren und diese dann in den entsprechenden Methoden verwenden.

Zum Beispiel könntest du das Panel "decide" wie folgt definieren und verwenden:

Java:
public class GUI1 {
// Instanzvariablen für die Panels
private JPanel decide;

public GUI1() {
frame();
decide();
}

public void decide() {
// Verwende die Instanzvariable für das Panel
decide = new JPanel();
JLabel logReg=new JLabel("login oder registrieren");
decide.add(logReg);

// ...
}
}

Du solltest auch darauf achten, dass du die Panels nur dann sichtbar machst, wenn sie auch tatsächlich angezeigt werden sollen. Zum Beispiel solltest du das Panel "login" erst sichtbar machen, nachdem der "login"-Button geklickt wurde.
 

Neue Themen


Zurück
Oben