Ukrywanie i pokazywanie paneli w okienku

0

Witam. Dopiero poznaje tajniki Javy i w ogóle programowania, tak się składa, że mam jeden projekt do zrobienia i od dłuższego czasu nurtuje mnie jeden problem. Ciężko było mi znaleźć rozwiązanie w internecie, a nawet jeśli już to nie potrafiłem go zaimplementować do swojego programu.

Moim celem jest stworzenie takiego jakby menu, że można wejść w jakiś panel, a potem cofnąć się z powrotem do innego panelu. Panele stanowią osobne klasy, a ich obiekty są tworzone w jeszcze innej klasie. Napisałem na szybko taki program poglądowy, żeby wyjaśnić co chcę osiągnąć. Jeśli zajdzie taka potrzeba to wrzucę też kod mojego programu, ale może być on trochę chaotyczny, bo jest tam porozrzucanych wiele niedokończony jeszcze funkcjonalności itd.

Program główny

import java.awt.EventQueue;
import java.awt.event.ActionEvent;

public class Zapytanie {


public static void main (String[]args){

	
	EventQueue.invokeLater(new Runnable(){

		@Override			
		public void run (){						
			Okienko1 okienko1 = new Okienko1();					
		}
	});
}
}

Ramka, do której dodaje panele:

public class Okienko1 extends JFrame implements ActionListener{

	public Panel1 panel1 = new Panel1();
	public Panel2 panel2 = new Panel2();
	
	Okienko1(){
		super("Zapytanie");						
		setVisible(true);							
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(false);						
		setLocation(600,300);				
		setSize(300,300);
		setLayout(null);
		
		add(panel1);
		panel1.setBounds(0,0,300,300);
		
		add(panel2);
		panel2.setBounds(0,0,300,300);
		panel2.setVisible(false);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		panel1.setVisible(false);
		panel2.setVisible(true);
	}

}

Panel1:

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

public class Panel1 extends JPanel {


	public JButton przycisk1;

	Panel1(){
		setVisible(true);
		setLayout(null);
		przycisk1 = new JButton("Wejdź");
		przycisk1.setBounds(100,100,100,50);
		add(przycisk1);
	}
}

Panel2:

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

public class Panel2 extends JPanel {


	public JButton przycisk2;

	Panel2(){
		setVisible(true);
		setLayout(null);
		przycisk2 = new JButton("Wyjdź");
		przycisk2.setBounds(100,100,100,50);
		add(przycisk2);
	}
}

Jak zrobić coś takiego, żeby z Panelu2 wpłynąć na Panel1, np. zmienić jego widoczność?
Aha i nie dodałem ActionListenera, bo właśnie nie działa w ten sposób. Musiałbym utworzyć przycisk w klasie "Ramka1" i z niej zmienić widoczność paneli. Problem w tym, że z panelu 2 nie jestem w stanie wpłynąć na program w "Okienko1".

1

Mały OT, instrukcja setVisible(true) powinna być po dodaniu wszystkich komponentów.
Są prostsze rozwiązania:
eleganckie, użycie JTabbedPane (panel z zakładkami)
przycisk zmieniający panele w głównym oknie, np. na pasku narzędzi
Poniżej kod dla Twojego pomysłu.

import javax.swing.JFrame;
public class Okienko1 extends JFrame
{

    public Panel1 panel1 = new Panel1(this);
    public Panel2 panel2 = new Panel2(this);

    Okienko1()
    {
        super("Zapytanie");                     
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);                        
        setLocation(600,300);               
        setSize(300,300);
        setLayout(null);

        add(panel1);
        panel1.setBounds(0,0,300,300);

        panel2.setBounds(0,0,300,300);
        setVisible(true);                           
    }
}
import javax.swing.JPanel;
import javax.swing.JButton;

public class Panel1 extends JPanel {

    public JButton przycisk1;
    Okienko1 parent;

    Panel1(Okienko1 parent){
        this.parent = parent;
        setVisible(true);
        setLayout(null);
        przycisk1 = new JButton("Wejdź");
        przycisk1.setBounds(100,100,100,50);
        przycisk1.addActionListener(e -> changePanel());
        add(przycisk1);
    }
    private void changePanel()
    {
        parent.remove(parent.panel1);
        parent.add(parent.panel2);
    }
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.