Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zdobycie obiektu w którym się zajduje inny obiekt


LoroKraolo

Rekomendowane odpowiedzi

Opublikowano

Dobry! Chciałbym zrobić w moim programie coś takiego, iż po kliknięciu na przycisk zamyka się (albo po prostu staje niewidoczne) bieżące okno (JFrame). Na razie mam to zrobione poprzez przeszukiwanie wszystkich Frame'ów i jeśli któryś się nazywa tak jak moje obecnie otwarte okno to je zamykam, ale nie podoba mi się to rozwiązanie.
 

Mój kod wygląda tak:

Spoiler

 


package bazastudentow;

import javax.swing.JFrame;

//Klasa LoginFrame

public class LoginFrame extends JFrame {

    private LoginPanel mainPanel;

    public LoginFrame(String string) {
        super(string);
        this.mainPanel = new LoginPanel();
        
        add(mainPanel);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();

    }
}

//Klasa LoginPanel

package bazastudentow;

import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class LoginPanel extends JPanel {

    private JLabel identyfikatorLabel;
    private JTextField identyfikator;
    private JLabel hasloLabel;
    private JTextField haslo;
    private JButton zaloguj;
    private JButton zamknij;

    public LoginPanel() {
        super();
        this.zamknij = new JButton("Zakończ program");
        this.zaloguj = new JButton("Zaloguj");
        this.haslo = new JTextField();
        this.hasloLabel = new JLabel("Hasło:");
        this.identyfikator = new JTextField();
        this.identyfikatorLabel = new JLabel("Identyfikator:");

        add(identyfikatorLabel);
        add(identyfikator);
        add(hasloLabel);
        add(haslo);
        add(zaloguj);
        add(zamknij);

        identyfikator.setColumns(20);
        haslo.setColumns(20);

        zaloguj.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                if (identyfikator.getText().equals("Student")) {
                    if (haslo.getText().equals("StudentHaslo")) {
                        Frame frames[];
                        frames = Frame.getFrames();
                        for (int i = 0; i < frames.length; i++) {
                            System.out.println("Ramka " + i + ": " + frames[i].getClass().getSimpleName());
                            if (frames[i].getClass().getSimpleName().equals("LoginFrame")) {
                                frames[i].setVisible(false);
                            }
                            if (frames[i].getClass().getSimpleName().equals("StudentFrame")) {
                                frames[i].setVisible(true);
                            }
                        }
                        identyfikator.setText("");
                        haslo.setText("");
                        JOptionPane.showMessageDialog(null, "Zalogowano jako Student!", "SUKCES", JOptionPane.INFORMATION_MESSAGE);
                    } else {
                        JOptionPane.showMessageDialog(null, "Niepoprawne hasło!", "BŁĄD", JOptionPane.ERROR_MESSAGE);
                    }
                } else if (identyfikator.getText().equals("Prowadzacy")) {
                    if (haslo.getText().equals("ProwadzacyHaslo")) {
                        Frame frames[];
                        frames = Frame.getFrames();
                        for (int i = 0; i < frames.length; i++) {
                            System.out.println("Ramka " + i + ": " + frames[i].getClass().getSimpleName());
                            if (frames[i].getClass().getSimpleName().equals("LoginFrame")) {
                                frames[i].setVisible(false);
                            }
                            if (frames[i].getClass().getSimpleName().equals("ProwadzacyFrame")) {
                                frames[i].setVisible(true);
                            }
                        }
                        identyfikator.setText("");
                        haslo.setText("");
                        JOptionPane.showMessageDialog(null, "Zalogowano jako Prowadzacy!", "SUKCES", JOptionPane.INFORMATION_MESSAGE);
                    } else {
                        JOptionPane.showMessageDialog(null, "Niepoprawne hasło!", "BŁĄD", JOptionPane.ERROR_MESSAGE);
                    }
                } else if (identyfikator.getText().equals("Dziekan")) {
                    if (haslo.getText().equals("DziekanHaslo")) {
                        Frame frames[];
                        frames = Frame.getFrames();
                        for (int i = 0; i < frames.length; i++) {
                            System.out.println("Ramka " + i + ": " + frames[i].getClass().getSimpleName());
                            if (frames[i].getClass().getSimpleName().equals("LoginFrame")) {
                                frames[i].setVisible(false);
                            }
                            if (frames[i].getClass().getSimpleName().equals("DziekanFrame")) {
                                frames[i].setVisible(true);
                            }
                        }
                        identyfikator.setText("");
                        haslo.setText("");
                        JOptionPane.showMessageDialog(null, "Zalogowano jako Dziekan!", "SUKCES", JOptionPane.INFORMATION_MESSAGE);
                    } else {
                        JOptionPane.showMessageDialog(null, "Niepoprawne hasło!", "BŁĄD", JOptionPane.ERROR_MESSAGE);
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "Niepoprawny identyfikator!", "BŁĄD", JOptionPane.ERROR_MESSAGE);

                }
            }
        });
      
        zamknij.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                System.exit(0);
            }
        });

    }

    public JButton getZamknij() {
        return zamknij;
    }

}

Sam kod do zamykania i wyświetlania okna występuje tutaj trzy razy w zależności kto się zaloguje i wygląda tak (jest w kodzie powyżej, tutaj dla wyróżnienia tego fragmentu):

Spoiler

 


zaloguj.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                if (identyfikator.getText().equals("Student")) {
                    if (haslo.getText().equals("StudentHaslo")) {
                        Frame frames[];
                        frames = Frame.getFrames();
                        for (int i = 0; i < frames.length; i++) {
                            System.out.println("Ramka " + i + ": " + frames[i].getClass().getSimpleName());
                            if (frames[i].getClass().getSimpleName().equals("LoginFrame")) {
                                frames[i].setVisible(false);
                            }
                            if (frames[i].getClass().getSimpleName().equals("StudentFrame")) {
                                frames[i].setVisible(true);
                            }
                        }
                    }
                }
            }
}

 

Ten kod jest w klasie rozszerzającej JPanel. Obiekt tej klasy jest dodany do obiektu klasy rozszerzającej JFrame i to właśnie okno (LoginFrame) chcę zamknąć (uniewidocznić). Ale nie jestem do końca zadowolony z tego rozwiązania. Czy jest możliwość sięgnięcia do LoginFrame bez takiego przeszukiwania wszystkich otwartych okien?

  • Aive zmienił(a) tytuł na Zdobycie obiektu w którym się zajduje inny obiekt
  • 6 miesięcy temu...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...