kilka JPanel w jednym JFrame

0

Cześć, ostatnio wpadłem na pomysł zrobienia programu, który ma składać się z kilku okien o różnej zawartości ( żeby uprościć opis - pierwsze okno będzie np. oknem powitalnym z kilkoma przyciskami, w drugim będzie jakaś tabela, a w trzecim okno w którym będziemy wpisywali dane). W tym celu utworzyłem jedną główną klasę tworzącą główne okno programu, w którym mają być wyświetlane pozostałe panele, w których są obecne przyciski pozwalające na nawigację i przeniesienie do konkretnego innego panelu. Pomimo prób niestety nie udało mi się osiągnąć poprawnego rezultatu, gdyż albo wyświetlana jest strona początkowa i klikniecie w przycisk nic nie daje, albo po naciśnięciu przycisku strona początkowa znika i nie pokazuje się okno z pożądaną zawartością. Poniżej zamieszczam uproszczony kod.

Główne okno z klasą main.



import java.awt.CardLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Okna extends JFrame {

    CardLayout manager = new CardLayout();
    private JPanel panelGlowny;

    private JFrame oknoProgramu;
    private Okno1 okno1 = new Okno1();
    private Okno2 okno2 = new Okno2();

    public Okna() {
        oknoProgramu = new JFrame();
        panelGlowny = new JPanel();
        panelGlowny.setLayout(manager);

        oknoProgramu.add(panelGlowny);
        panelGlowny.add(okno1, "okno1");
        panelGlowny.add(okno2, "okno2");
        manager.show(panelGlowny, "okno1");

        setSize(700, 700);
        setLayout(null);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);

    }

    public static void main(String[] args) {
        new Okna();

    }

}



Okno 1 które ma być wyświetlane na samym początku zawierające, przycisk dalej, który ma przenosić do Okna 2.


import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;



public class Okno1 extends JPanel implements ActionListener{

private JPanel okienko1;
private JButton przycisk;
public Okno1()
{
    
    okienko1=new JPanel();
   przycisk=new JButton("dalej");
    okienko1.setVisible(true);
    okienko1.add(przycisk);
    okienko1.setBounds(20, 20, 200, 200);
    okienko1.setBackground(Color.red);
    przycisk.setBounds(20, 20, 40, 70);
   przycisk.setFocusable(false);
    przycisk.addActionListener(this);
    
}

    @Override
    public void actionPerformed(ActionEvent e) {
    Object klawisz = e.getSource();
    
    
    if(klawisz==przycisk)
    {
        
    }
    
    }
    
    
    
}


Okno 2, które ma być wyświetlone po kliknięciu przycisku "dalej" obecnego w oknie 1. Zawiera przycisk "wstecz" pozwalający powrócić do okna początkowego



import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;


public class Okno2 extends JPanel implements ActionListener{

private JPanel okienko2;
private JButton cofnij;

    public Okno2() {
 okienko2=new JPanel();
   cofnij=new JButton("wstecz");
    okienko2.setVisible(true);
    okienko2.add(cofnij);
    okienko2.setBounds(20, 20, 200, 200);
    okienko2.setBackground(Color.red);
    cofnij.setBounds(20, 20, 40, 70);
   cofnij.setFocusable(false);
    cofnij.addActionListener(this);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
 Object klawisz = e.getSource();
    
 if(klawisz==cofnij)
 {
     
 }
    
    }
    


}


Wiem, że nie dodałem żadnych komend, które mają się wykonać po naciśnięciu przycisku. Czy ktoś mógłby mi pomóc i powiedzieć jak poprawnie rozwiązać problem z przełączaniem kart i jak wywoływać poszczególne okna?

0

Czy chodzi Ci o coś takiego? How to Use Tabbed Panes

0
jarekczek napisał(a):

Czy chodzi Ci o coś takiego? How to Use Tabbed Panes

Nie nie chodzi mi o zakładki w postaci kart. Chodzi mi o to że po kliknięciu przycisku znajdującego się w jednym panelu pojawia mi się inny panel z innym zestawem przycisków, które również między innymi pozwalają na powrót do okna pierwotnego. Bardziej myślałem o CardLayout ale mam problem żeby odpowiednio go zaimplementować. Chyba że do tego co chcę osiągnąć należy użyć czegoś innego.

0

To ma być coś takiego aczkolwiek nie działa mi kod. Proszę o pomoc.


import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Okna extends JFrame implements ActionListener{

    CardLayout manager = new CardLayout();
    private JPanel panelGlowny;

    private JFrame oknoProgramu;
    private Okno1 okno1 = new Okno1();
    private Okno2 okno2 = new Okno2();

    private JButton przyciskDalej=new JButton("Dalej");
    private JButton przyciskWstecz= new JButton("Wstecz");
    
    public Okna() {
         oknoProgramu = new JFrame();
        panelGlowny = new JPanel();
        
        przyciskDalej.setSize(new Dimension(40, 70));
        przyciskWstecz.setSize(new Dimension(40, 70));
        przyciskDalej.setFocusable(false);
        przyciskWstecz.setFocusable(false);
      
        okno1.add(przyciskDalej);
        okno2.add(przyciskWstecz);
        
        
       
        panelGlowny.setLayout(manager);
 panelGlowny.add(okno1, "okno1");
        panelGlowny.add(okno2, "okno2");
        oknoProgramu.add(panelGlowny);
       
      
        setSize(700, 700);
        setLayout(null);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);

    }

    public static void main(String[] args) {
        new Okna();

    }

    @Override
    public void actionPerformed(ActionEvent e) {
   Object objekt =e.getSource();
   if(objekt==przyciskDalej)
   {
    manager.show(panelGlowny, "okno2");
    okno1.setVisible(false);
    okno2.setVisible(true);
    

   }
   if(objekt==przyciskWstecz)
   {
       manager.show(panelGlowny, "okno1");
   okno2.setVisible(false);
   okno1.setVisible(true);
   }
    
    }

}



import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;



public class Okno1 extends JPanel {

private JPanel okienko1;

public Okno1()
{
 
    
   this.setBounds(20, 20, 200, 200);
    this.setBackground(Color.red);
 
}


    
    
    
}
```java


```java

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;


public class Okno2 extends JPanel {

private JPanel okienko2;


    public Okno2() {

   
    this.setBounds(20, 20, 200, 200);
    this.setBackground(Color.BLUE);
  

    }


    


}

Ostateczny wynik działania ma przypominać, żeby lepiej zobrazować o co mi chodzi np. zachowanie okna podczas instalacji programu. Najpierw pojawia się okno klikamy przycisk dalej, następnie pojawia się nowa zawartość okna i powiedzmy przycisk dalej i wstecz. Dalej powoduje przejście do kolejnego okna, a wstecz do poprzedniego. Taki efekt chciałbym uzyskać.

0

To spróbuj teraz doprowadzić do tego, że jak uruchamiasz program, to pokazuje Ci się drugie okno. Potem już powinno się to dać połączyć. Widzę, że ukrywasz i pokazujesz okna. Ta droga wydaje się w porządku Można jeszcze spróbować obiekty całkowicie usuwać z panelu głównego, zobaczyć jak na to zareaguje.

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