Tworzenie nowego okna

Odpowiedz Nowy wątek
2015-02-03 18:07

Rejestracja: 7 lat temu

Ostatnio: 1 miesiąc temu

0

Witam
Mam niewielki problem z moją mini gierką.
Sprawa wygląda nastepująco :

W pierwszym Frame podaje imiona graczy.
W drugim Frame mam MenuBar z ktorego jest opcja "New Game"

gdy klikne ten przycisk odpala mi sie nowa gra, ale niestety ta stara nadal jest wyswietlana a gdy probuje ją zamknąć "X" to wyłącza mi sie automatycznie również ta nowa
jak zrobić aby przy tworzeniu nowej rozgrywki zamknąć to stare okno ?

Pozostało 580 znaków

2015-02-04 01:51

Rejestracja: 12 lat temu

Ostatnio: 4 miesiące temu

Lokalizacja: Polska, Warszawa

0

Wróć z powrotem do projektowania tego co chcesz zrobić zamiast ruszać z kodowaniem nie wiedząc czego chcesz.
GUI okienne powstały po to aby uniezależnić aplikacje od parametrów i ilości rzeczywistych ekranów obsługiwanych w systemie. Można na palcach policzyć gry, których koncepcja uwzględnia używanie więcej niż jednego ekranu - zwykle są to symulatory lotnicze lub bardzo rozbudowane strategie (nie żadne RTS). 99% gier potrzebuje i używa jednego ekranu. A odpowiednikiem ekranu jest dla gry opartej na api systemu ramka okna, czyli jakiś frame czyli w Javie np. JFrame. Krótko mówiąc - daj sobie spokój z tworzeniem gry, która potrzebuje/otwiera więcej niż jedno okno. No chyba, że piszesz jakiś symulator lub strategię i dwa ekrany/okna są ku temu niezbędne.

Jednak jeżeli chcesz poznać niuanse obsługi więcej niż jednego okna, to z punktu widzenia użytkownika odpal sobie program GIMP w trybie wielookiennym, a z punktu widzenia programisty demo o nazwie Swingset, Swingset2 lub Swingset3. Tam będziesz się mógl przyjrzeć jak się prawidłowo zarządza więcej niż jednym oknem (top level). Jest jeszcze takie coś jak MDA, czyli zarządzanie wieloma oknami dokumentów w oknie macierzystym. To też warto sobie obejrzeć, żeby przynajmniej wiedzieć co, jak i po co.

A odpowiadając na Twoje pytanie. Wynika z tego posta, że menu jednej gry otwiera drugą nową grę. To jest błąd projektowy.
Zamykając okno jednej gry, albo zamykasz aplikację i wtedy zamykane są wszystkie okna, albo tworzone nowe okno gry ma jako rodzica wpisane okno z którego wywołano polecenie, co oznacza że jedna gra jest zależna od innej (nie potrafię na podstawie tych informacji określić, która z tych możliwości jest zaprogramowana).
Albo więc musisz zrobić osobne okno do obsługi różnych gier w różnych oknach (ale kompletnie niezależnie od siebie nawzajem) - takie okno może być na osobnym ekranie, albo polecenie otwarcia nowej gry musi utworzyć JFrame bez rodzica, a wszystkie dotychczasowe zamknąć. Programowe zamknięcie robi się metodą close okna (zaskakujące nieprawdaż?:)). Żeby wiedzieć co zamknąć musisz oczywiście gdzieś przechowywać referencje otwartych okien gier. Typowym błędem początkujących jest "zachowywanie" referencji w zmiennej lokalnej, która jest w ten sposób niedostępna nigdzie poza metodą main. Musi być ona więc przechowywana w polu klasy aplikacji lub w jakimś kontenerze dostępnym dla operacji na poszczególnych "grach".


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?

Pozostało 580 znaków

2015-02-09 15:57

Rejestracja: 7 lat temu

Ostatnio: 1 miesiąc temu

0

mhh dzięki za rozbudowaną odpowiedź. Bo chodzi mi o taki przycisk "New Game". Czyli tak jakby całą aplikację odpalamy od nowa.
Przykładowo :

Main(okno Menu, tutaj mogło by być np wprowadzanie imion graczy itd )

 import java.awt.Button;

public class Main {
    private JFrame f;

    public Main() {
        prepare();
        init();

    }

    private void init() {
        JButton btnStart = new JButton("Start");
        btnStart.setBounds(150, 159, 89, 23);
        btnStart.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("new window");
                new Game();

            }
        });

        f.getContentPane().add(btnStart);

    }

    private void prepare() {
        f = new JFrame();
        f.getContentPane().setLayout(null);
        f.setSize(400, 320);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.setVisible(true);

    }

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

    }
}

Game ( tutaj by toczyła się cała gra, i żeby uzytkownik miał mozliwosc jakby skasowania obecnej gry, i od nowa powrocic do Menu wprowadzic imiona itd itd, Za to odpowiedzialny byłby btn )

 import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Game {
    private JFrame f;

    public Game() {
        f = new JFrame();
        f.getContentPane().setLayout(null);
        f.setSize(400, 320);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        JButton x = new JButton(); 
        x.setBounds(50, 50, 100, 50);
        x.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                new Main();

            }
        });
        f.add(x);
    }

}

TYlko jeśli tworzę to w taki sposób, co prawda przechodzimy do MEnu z powrotem ale niestety zostają te stare okna :/

Pozostało 580 znaków

Odpowiedz

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