Как вызвать преобладающий кадр из нового кадра, как снова установить видимый? - PullRequest
0 голосов
/ 25 августа 2018

У меня есть Meni JFrame, который я устанавливаю невидимым, когда я вызываю другой кадр, например, нажатием кнопки. Отчеты JFrame, а теперь как звонить, из кадра Отчеты, опять тот же кадр Мени, который у меня был раньше, а не новый.

Мой код сейчас выглядит примерно так:

Мени

JButton btnReports = new JButton("   Reports");
    btnReports.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            Reports r = new Reports();
            reports.setVisible(true);
            setVisible(false); //setting current JFrame invisible 

        }
    });

Теперь я хочу вернуться к тому же кадру Мени, который я ранее установил как невидимый, а не создавать новый, как это сделать, ofc, если это возможно?

Отчеты

 JButton btnMeni = new JButton("   Meni");
    btnMeni.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            //if i do the same like in Meni it will call new window, and 
            //i don't want that i simply want to setVisible Meni window again

            dispose();

        }
    });

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Вы не должны использовать 2 кадра здесь. Вместо этого используйте CardLayout . Вот небольшой пример того, как вы можете поместить два сценария в один JFrame

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;

public class ScreenUI {

    private static final String FIRST_SCREEN = "first";

    private static final String SECOND_SCREEN = "second";

    public static void main(String[] args) {
        JFrame frame = new JFrame("Multiscreen");
        CardLayout cl = new CardLayout();
        // set card layout
        frame.getContentPane().setLayout(cl);
        // build first screen
        JPanel firstScreen = new JPanel(new BorderLayout());
        firstScreen.add(new JScrollPane(new JList<>(new String[] {"One", "Two", "Three", "Four"})));
        JButton nextScreen = new JButton("Next");
        // action to show second screen, which is referenced per string constant
        nextScreen.addActionListener(e -> cl.show(frame.getContentPane(), SECOND_SCREEN)); 
        JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING));
        buttonsPanel.add(nextScreen);
        firstScreen.add(buttonsPanel, BorderLayout.SOUTH);
        frame.getContentPane().add(firstScreen, FIRST_SCREEN);
        // build second screen
        JPanel secondScreen = new JPanel(new BorderLayout());
        secondScreen.add(new JScrollPane(new JTree()));
        JButton previousScreen = new JButton("Previous");
        // action to show first screen, which is referenced per string constant
        previousScreen.addActionListener(e -> cl.show(frame.getContentPane(), FIRST_SCREEN));
        buttonsPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING));
        buttonsPanel.add(previousScreen);
        secondScreen.add(buttonsPanel, BorderLayout.SOUTH);
        frame.getContentPane().add(secondScreen, SECOND_SCREEN);
        frame.setSize(400, 300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
0 голосов
/ 25 августа 2018

Вы можете добавить слушателя к своему «основному» фрейму, который снова сделает ваш фрейм видимым, когда фрейм отчета закрыт:

   r.addWindowListener(new WindowAdapter()
    {
        @Override
        public void windowClosing(WindowEvent e)
        {
            setVisible(true);

        }
    });

Документация Java для WindowListener: https://docs.oracle.com/javase/7/docs/api/java/awt/event/WindowListener.html#windowClosing(java.awt.event.WindowEvent)

Чтобы в фрейме отчета просто закрыли окно в методе OnButtonClick с помощью

frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...