Przejście do drugiego okna po kliknięciu w przycisk

0

Cześć, mam pytanie. Jaki jest najprostszy sposób aby po naciśnięciu przycisku można było przejść do 2 okna ? Stworzyłem klasę Menu w której mam 3 buttony i jeden z nich to "control", zrobiłem też klasę Control ale nie wiem jak teraz się do niej odwołać, żeby w ActionPerformed można było do niej przejść. Czy da się to jakoś połączyć ? Stworzyć panele czy coś podobnego ?

public class Menu extends JFrame implements ActionListener

{
    private JLabel background;
    private JButton startGame, control, exit;


    public Menu()
    {
        setSize(1000, 600);
        setTitle("Pocket Tanx");
        setLayout(null);

        startGame = new JButton("Start Game");
        startGame.setBounds(450, 400, 100, 30);
        setLayout(null);
        add(startGame);
        startGame.addActionListener(this);


        control = new JButton("Control");
        control.setBounds(450, 440, 100, 30);
        add(control);
        control.addActionListener(this);


        exit = new JButton("Exit");
        exit.setBounds(450, 480, 100, 30);
        add(exit);
        exit.addActionListener(this);

        background = new JLabel(new ImageIcon("images/background.jpg"));
        background.setOpaque(true);
        background.setBounds(0, 0, 1000, 600);
        add(background);

    }

    public void actionPerformed(ActionEvent ae)
    {
        Object source = ae.getSource(); //sprawdza który przycisk nacisneliśmy
        if (source == startGame)
        {

        } else if (source == control)
        {
          
        } else if (source == exit)
        {
            dispose();
        }

    }

    public static void main(String[] args)
    {
        Menu frame = new Menu();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }


}


i klasa Control

public class Control extends JFrame
{
    public Control()
    {
        setSize(1000, 600);
        setTitle("Control");
    }
    public static void main (String[] args)
    {
        Control frame2 = new Control();
        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame2.setVisible(true);

    }
}

Nie wiem czy powinny być 2 funkcje main, w sumie pewnie jest trochę błędów ale liczę ze je znajdziecie

I teraz potrzebuję po nacisnięciu buttona "Control" przeskoczyć do 2 okna w kótrym też musi znaleźć się button " back " i wrócić do pierwszego ;)

0
        } else if (source == control)
        {
             new Control().setVisible(true);
        } else if (source == exit)

Metoda main w klasie Control jest zbyteczna. Polecenie

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

w klasie Control jest złe. Przecież zamknięcie okna klasy Control nie ma kończyć programu, tylko wracać do głównego okna.

0

@bogdans próbowałem tego ale błąd wyskakuje : Error:(66, 24) java: cannot find symbol
symbol: class setVisible
location: class Control

czyli, klasa kontrol nie jest zaincludowana czy coś w tym stylu i nie wiem jak ją dodać do klasy Menu

@bogdans jeśli usunę metodę main to gdzie mam wywołać obiekt ?

0

Opuściłem nawias.

0

O boże jakie to proste... @bogdans dzięki wielkie ;)

0

Źle kombinujesz. Program zawsze startuje z 1 miejsca, więc nawet jeżeli będą 2 funkcje main, to przy uruchamianiu odpalasz tylko jedną znich, a potem stają się zwykłymi funkcjami statycznymi bez specjalnych właściwości dodatkowych. Jeżeli odpalisz obie funkcje main z 2 różnych konsol to będą już 2 procesy, czyli komunikacja między nim będzie trudna.

Spróbuj dla rozjaśnienia zrobić tak:
-1 klasa Main, z funkcją main i beż żadnych widoków. Niech funkcjonuje jako starter programu.
-2 jframy, niech będą w takiej postaci jak teraz.
-Wytnij z nich mainy - są zbędne.
-Do klasy Control dodaj pole klasy Main i stwórz jego obiekt.
-W main uruchamiasz okno startowe, czyli (chyba) instancję Control.
-Dodaj do Menu funkcję show(JFrame invoker);
-Po kliknięciu przycisku w Controll, ukrywasz to okno, oraz wywołujesz metodę show(this) dla pola menu.
-W metodzie show klasy Menu pokazujesz to okno i zapisujesz jako pole invokera.
-W przypadku wciśnięcia przycisku back musisz zrobić akcję odwrotną, na polu invokera.

PS1. Twórz jeden ActionListener dla 1 przycisku. Okno nie powinno nim być.
PS2. Naprawdę spradź libgdx :). Takie rzeczy jak menu i zmianę ekranów masz tam wbudowaną.

0

@krzysiek050 okej, wiec chyba będę musiał zrobić od nowa. Muszę zacząć ogarniać tą bibliotekę, im wcześniej tym lepiej. Dzięki :)

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