Czyszczenie JFrame

0

Witam. Probowalem rozwiazac zadanie z pewnego kursu - utworzenie panelu logowania i jezeli dane sa poprawne to ma powstac nowy panel - edytor html z mozliwoscia podgladu rezultatow.
Nie wyskakuja zadne bledy, ale po wprowadzeniu loginu i hasla nic sie nie dzieje. Sprawdzalem i wszystko dziala, a problem tkwi w linijkach 67-69. Jak to poprawic zeby dzialalo? Bardzo prosze o pomoc :)

KOD:

import java.awt.*;

import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import java.util.*;

public class LoginPanel extends JPanel implements ActionListener{
	
	private JTextField nazwa;
	private JPasswordField haslo;
	private JButton logowanie;
	private JLabel name;
	private JLabel password;
	private String login = "kowalski";
	private String pw = "jan";
	private JFrame frame = new JFrame();
	
	public String getName(){
		return nazwa.getText();
	}
	public String getPassword(){
		String password = "";
		char[] pass = haslo.getPassword();
		for(int i=0; i<pass.length; i++){
			password = password + pass[i];
		}
		return password;
	}			
	public LoginPanel(){
		super();
		name = new JLabel("Nazwa: ");
		password = new JLabel("Hasło: ");
		logowanie = new JButton("Zaloguj");
		haslo = new JPasswordField();
		nazwa = new JTextField();
		logowanie.addActionListener(this);
		
		JPanel tabelka = new JPanel();
		tabelka.setLayout(new GridLayout(2,2));
		tabelka.add(name);
		tabelka.add(nazwa);
		tabelka.add(password);
		tabelka.add(haslo);
		
		JPanel przyciski = new JPanel();
		przyciski.setLayout(new BorderLayout());
		przyciski.add(tabelka, BorderLayout.CENTER);
		przyciski.add(logowanie, BorderLayout.SOUTH);
		
		this.add(przyciski);
		
}
	public boolean sprawdzenie(){
		if(getName().equals(login) & getPassword().equals(pw))
			return true;
		else
			return false;
	}
	public void actionPerformed(ActionEvent e){
	if(sprawdzenie()){
		
		SwingUtilities.invokeLater(new Runnable(){
			
			public void run(){
				
67				frame.getContentPane().removeAll();
	68			frame.add(new HTMLPanel());
		69		frame.validate();
			}
		});
	        }
	}
}



import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import java.util.*;

public class HTMLPanel extends JPanel implements ActionListener{
	
	public JTextArea tekst = new JTextArea();
	public JEditorPane edytor = new JEditorPane();
	JButton podglad;
	
	public HTMLPanel(){
		super();
		setLayout(new BorderLayout());
		nowyPanel();
	}
	public void nowyPanel(){
		edytor.setEditable(false);
		edytor.setContentType("text/html");
		podglad = new JButton("Podglad");
		podglad.addActionListener(this);
		
		tekst.setBackground(Color.LIGHT_GRAY);
		
		JPanel wyglad = new JPanel();
		wyglad.setLayout(new GridLayout(1,2));
		wyglad.add(tekst);
		wyglad.add(edytor);
		
		this.add(wyglad, BorderLayout.CENTER);
		this.add(podglad, BorderLayout.SOUTH);
	}
	public void actionPerformed(ActionEvent e){
		
		SwingUtilities.invokeLater(new Runnable(){
			
			public void run(){
				String text = tekst.getText();
				edytor.setText(text);
				edytor.revalidate();
			}
		});
	}
}


import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import java.util.*;

public class Frame extends JFrame{
	
	public Frame(){
		super("Test");
		
		add(new LoginPanel());
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		setPreferredSize(new Dimension(600,400));
		setLocation(500,200);
		pack();
		}
}



import java.awt.EventQueue;

public class Main{
	public static void main(String[] args){
		
		EventQueue.invokeLater(new Runnable(){
			
			public void run(){
				
				new Frame();
			}
		});
	}
}
0

Zapnij tam debugger i zobacz czy ci w ogóle wchodzi do tego twojego ifa. btw moje oczy krwawią jak widze

    public String getPassword(){
        String password = "";
        char[] pass = haslo.getPassword();
        for(int i=0; i<pass.length; i++){
            password = password + pass[i];
        }
        return password;
    }

A po takich operacjach na frame to warto jednak zrobić pack albo repaint bo może zadziałało tylko nie widać.

0

Czemu Twoje oczy krwawia? Mozesz napisac jak Ty bys to zrobil? Dopiero zaczynam nauke javy i tak bylo to na kursie rozpisane.
Jeszcze nie mialem doczynienia z debuggerem, zaraz sie zapoznam z tematem.

0
    public String getPassword(){
        return new String(haslo.getPassword());
    } 
0

dziekuje :)

0

Jeżeli okno - wbrew oczekiwaniom - nie zmienia wyglądu, to je zminimalizuj i przywróć. Jeśli po tych operacjach wygląda zgodnie z oczekiwaniami, to znaczy że brakuje w kodzie repaint();

0

Niestety, to nie to :(

0

bo nie ma prawa to działać...

w klasie LoginPanel Tworzysz obiekt typu JFrame i? w jakim celu? jaki sens ma późniejsze operowaniu na tym obiekcie? nigdzie go nie dodajesz, nie wyświetlasz nie pracujesz na nim w ogóle...

tzn. dodajesz do niego ten HTMPPanel ale poza tym nie jest to wyświetlane.

0

Rafal postepowalem wg kursu i wyszlo jak wyszlo :) najwidoczniej Shalom masz racje albo moze troche za bardzo chcialem to po swojemu pozmieniac, bo kod z tego kursu dzialal, ale byl strasznie zamotany jak dla mnie i ciezki do zrozumienia,.

zamienilem

 SwingUtilities.invokeLater(new Runnable(){
 
            public void run(){
 
frame.getContentPane().removeAll();
        frame.add(new HTMLPanel());
            frame.validate();

na

  removeAll();
      add(new HTMLPanel());
validate();

i wszystko dziala jak nalezy :))

Dzieki piekne za pomoc!!! :)

0

teraz ok czyścisz Panel, który jest wyświetlany i wstawiasz kolejny na niego a nie jak wcześniej tworzyłeś obiekt, z którym nic więcej nie robiłeś.

1 użytkowników online, w tym zalogowanych: 0, gości: 1