Thema: JPanel neu zuweisen

22.12.15 22:42 #1

Wingman

Registriert seit: 06.12.2015

Beiträge: 1

-

Hallo Leute,
ich habe bereits seit einer gewissen Zeit ein Problem.
Ich hab ein einfaches Login Modul erstellt blablabla und will nun natürlich, dass sich bei erfolgreichem Einloggen auch das Fenster ändert.
ich bin bis jetzt noch nicht auf die rettende Idee gekommen also frag ich hier einfach mal.
Ich freue mich schon auf Antworten,

Mfg der Wingman.


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
So habe ich es versucht(wie bereits gesagt ohne Erfolg):

Das ist sozusagen die "Main" - Klasse:

Quellcode ausblenden Java-Code
import java.awt.*;
import javax.swing.*;
public class MyProject extends JFrame{
    JPanel p;
    public static void main(String[] args){
        MyProject m = new MyProject();
    }
    public MyProject(){
        this.setSize(1930,1030);
        this.setLocation(-5,53);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        BorderLayoutDemo bl = new BorderLayoutDemo();
        p = bl.BorderLayoutDemo(1);
        this.add(p);
        this.setVisible(true);
    }
}



Hier wird das Panel erstellt, welches sich eigentlich im Laufe des Programms ändern sollte:

Quellcode ausblenden Java-Code
import javax.swing.*;
import java.awt.*;
public class BorderLayoutDemo{
    JPanel p;
    JPanel p1;
    JPanel p2;
    public JPanel BorderLayoutDemo(int state){
        switch(state){
            case 1:
            p = new JPanel();
            p1 = new JPanel();
            Login log = new Login();
            p1.setLayout(new BorderLayout());
            p1 = log.Login();
            p.add(p1, BorderLayout.PAGE_END);
            break;
            case 2:  
            p2 = new JPanel();
            p.add(p2, BorderLayout.CENTER);
            JFrame f = new JFrame();
            f.add(p2);
            f.setVisible(true);
        }
        return p;
    }  
}



Das Login (könnte etwas verwirrend sein und ja tut mir Leid aber iwie benutze ich keine Kommentare):

Quellcode ausblenden Java-Code
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.awt.*;
public class Login implements ActionListener{
    JPanel p;
    LinkedList<String> names = new LinkedList<String>();
    HashMap<String, String> password = new HashMap<String, String>();
    JTextField t1;
    JPasswordField pf;
    JLabel l;
    JButton bl;
    JButton ba;
    JButton back;
    JButton add;
    JButton afr;
    String name;
    String passwort;
    String ppw;
    int ex;
    int ak;
    int status;
    int accounts = 0;
    public JPanel Login(){
        p = new JPanel();
        t1 = new JTextField("Name",10);
        pf = new JPasswordField(10);
        l = new JLabel("Anmelden");
        bl = new JButton("Login");
        ba = new JButton("Hinzufügen");
        back = new JButton("Zurück");
        add = new JButton("Account hinzufügen");
        afr = new JButton("Hinzufügen");
        p.add(t1);
        p.add(pf);
        p.add(l);
        p.add(bl);
        p.add(ba);
        bl.addActionListener(this);
        ba.addActionListener(this);
        back.addActionListener(this);
        add.addActionListener(this);
        afr.addActionListener(this);
        t1.addActionListener(this);
        return p;
    }
    public void actionPerformed(ActionEvent ae){
        if(ae.getSource() == this.add){
            refresh();
            p.add(afr);
            p.add(back);
            p.add(l);
            l.setText("Sind sie sicher?"); 
            System.out.println("add");
        }
        if(ae.getSource() == this.ba){
            refresh();
            p.add(t1);
            p.add(pf);
            p.add(add);
            p.add(back);
            p.add(l); 
            l.setText("");
        }
        if(ae.getSource() == this.back){
            refresh();
            p.add(t1);
            p.add(pf);
            p.add(l);
            p.add(bl);
            p.add(ba);
            l.setText("");
        }
        if(ae.getSource() == this.afr){
            name = t1.getText();
            char[] pasw = pf.getPassword();
            passwort = new String(pasw);
            hinzufügen(name, passwort);  
            refresh();
            p.add(t1);
            p.add(pf);
            p.add(bl);
            p.add(back);
            p.add(l); 
            l.setText("Anmelden");
        }
        if(ae.getSource() == this.bl){
            try{
                lesen();
                accounts = 0;
            }
            catch(NullPointerException e){
                System.out.println("Fehler beim lesen");
            }
            name = t1.getText();
            boolean exists = names.contains(name); 
            ex = boolToInt(exists);
            ppw = password.get(name);
            char[] pasw = pf.getPassword();
            passwort = new String(pasw);
            try{
                boolean acc = ppw.equals(passwort);
                ak = boolToInt(acc);
                switch(ex){    
                    case 1:
                    switch(ak){
                        case 1:  
                        BorderLayoutDemo bl = new BorderLayoutDemo();
                        p = bl.BorderLayoutDemo(1);
                        break;
                        case 0:
                        l.setText("Benutzername oder Passwort falsch");
                    }
                }
            }
            catch(NullPointerException e){
                l.setText("Benutzername oder Passwort falsch");
            }  
        }
    }
    int boolToInt(Boolean b) {
        return b.compareTo(false);
    }
    public void hinzufügen(String nn, String pa){
        try{
            FileOutputStream out1 = new FileOutputStream("C:\\Users\\Radi\\Documents\\list.txt", true);
            FileOutputStream out2 = new FileOutputStream("C:\\Users\\Radi\\Documents\\pass.txt", true);
            Formatter f1 = new Formatter(out1);
            Formatter f2 = new Formatter(out2);
            f1.format("%s"," "+nn);
            f2.format("%s"," "+pa);
            f1.close();
            f2.close();
            l.setText("erfolgreich hinzugefügt");
        }
        catch(Exception e){
            System.out.println("hinzufügen fehlgeschlagen");
        }
    }
    public void lesen(){
        try{
            File list = new File("C:\\Users\\Radi\\Documents\\list.txt");
            File pass = new File("C:\\Users\\Radi\\Documents\\pass.txt");
            Scanner sc1 = new Scanner(list);
            Scanner sc2 = new Scanner(pass);
            while(sc1.hasNext() && sc2.hasNext()){
                String n1 = sc1.next();
                String t2 = sc2.next();
                names.add(n1);
                password.put(n1,t2);
                accounts++;
            }
        }
        catch(Exception exc){
            System.out.println("Fehler beim lesen");
        }
    }
    public void refresh(){
        p.removeAll();
        p.revalidate();
        p.repaint();
    }
}


und zuletzt die Form die das neue Panel annehmen soll:
Quellcode ausblenden Java-Code
import javax.swing.*;
import java.awt.event.*;
public class Mainpage extends JPanel implements ActionListener{
    JButton vv;
    JLabel nl;
    public Mainpage(){
        vv = new JButton("abmelden");
        nl = new JLabel("Sie sind angemeldet");
        vv.addActionListener(this);
        this.add(vv);
        this.add(nl);
    }
    public void actionPerformed(ActionEvent ae){
        if(ae.getSource() == this.vv){
            
        }
    } 
}

23.12.15 09:15 #2

eulerscheZhl

Registriert seit: 21.11.2014

Beiträge: 14

-

Hallo,
ich habe mich mal auf das Nötigste beschränkt und einiges gelöscht:

Hier die Main. Ich warte auf ein Event, das auftritt, wenn die Anmeldung erfolgreich war.

Quellcode ausblenden Java-Code
import javax.swing.JFrame;

public class Main extends JFrame implements LoginListener {

	public static void main(String[] args) {
		Main m = new Main();
	}

	public Main() {
		this.setSize(1930, 1030);
		this.setLocation(-5, 53);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Login login = new Login();
		login.addLoginListener(this);
		this.getContentPane().add(login);

		this.setVisible(true);
	}

	@Override
	public void loginComplete() {
		System.out.println("test");
		this.getContentPane().remove(0);
		this.getContentPane().add(new Mainpage());
		this.getContentPane().invalidate();
		this.getContentPane().repaint();
		this.pack();
	}
}


Beim erfolgreichen Login (hier immer, die Abfrage habe ich entfernt, allein schon, weil der Ornder "C:\\Users\\Radi\\Documents\\" nicht existiert, habe noch nichtmal ein C Laufwerk).
Du kannst Beobachter hinzufügen, die dann beim Login informiert werden.
Quellcode ausblenden Java-Code
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JPanel;

public class Login extends JPanel implements ActionListener {
	private JPanel p;
	private JButton bl;
	private List<LoginListener> listeners = new ArrayList<LoginListener>();

	public Login() {
		bl = new JButton("Login");
		this.add(bl);
		bl.addActionListener(this);
	}

	public void addLoginListener(LoginListener listener) {
		listeners.add(listener);
	}

	public void actionPerformed(ActionEvent ae) {
		if (ae.getSource() == this.bl) {
			for (LoginListener l : listeners)
				l.loginComplete();
		}
	}
}


Schnittstelle, um Listener zu informieren:
Quellcode ausblenden Java-Code
public interface LoginListener {
	void loginComplete();
}


Mainpage habe ich dir so gelassen.

1896113

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.

13ms