Java: Как закрыть JFrame при открытии другого? - PullRequest
3 голосов
/ 17 января 2011

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

processEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));

на рамке изображения, но он закрывает все окна.

Ответы [ 10 ]

7 голосов
/ 17 января 2011

Метод JFrame.setVisible можно использовать для скрытия или отображения JFrame на основе аргументов, тогда как JFrame.dispose фактически «разрушит» фрейм, закрыв его и освободив ресурсы, которые он использовал. Здесь вы должны вызвать setVisible(false) на рамке рисунка, если вы собираетесь снова открыть его, или вызвать dispose() на рамке рисунка, если вы не будете открывать его снова, чтобы ваша программа могла освободить часть памяти. Затем вы должны вызвать setVisible(true) в основном кадре, чтобы сделать его видимым.

2 голосов
/ 21 января 2011

Вы также можете использовать этот код

например

  JFrame frame = new JFrame();
  frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
1 голос
/ 15 ноября 2017

Это сообщение немного устарело, но тем не менее.

Если вы инициализируете форму следующим образом:

JFrame firstForm = new JFrame();

firstForm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
firstForm.setSize(800, 600);
firstForm.setLocationRelativeTo(null);

firstForm.setVisible(true);

И, например, создайте или откройте другую форму с помощью кнопки:

JFrame secondForm = new JFrame();

secondForm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
secondForm.setSize(800, 600);
secondForm.setLocationRelativeTo(null);

secondForm.setVisible(true);

this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));

Это удалит и уничтожит первое окно, не выходя из программы.
Ключ должен установить setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE).
Это также вызывает события (я проверял это с WindowClosingсобытие).

1 голос
/ 30 июля 2015

Вот мое решение этой проблемы:

public void actionPerformed(ActionEvent e) {
    String userName =  textField.getText();
    String password = textField_1.getText();
    if(userName.equals("mgm") &&  password.equals("12345")) {            
         secondFrame nF = new secondFrame();

         nF.setVisible(false);
         dispose();          
    }   
    else 
    {
        JOptionPane.showMessageDialog(null, " Wrong password ");
    }
}
0 голосов
/ 23 октября 2018

Для netbeans используйте ссылку на текущий объект и setVisible(false);, например,

private void submitActionPerformed(java.awt.event.ActionEvent evt)
{                                
    // TODO add your handling code here:
    this.setVisible(false);//Closing the Current frame
    new login().setVisible(true);// Opening a new frame
}                                     
0 голосов
/ 17 октября 2017

Я искал то же самое и обнаружил, что использование «этого» - лучший и самый простой вариант. Вы можете использовать следующий код: this.dispose();

0 голосов
/ 14 августа 2016
if(username.equals("gaffar")&&password.equals("12345"))
    {
    label.setText("Be ready to continue");
    //Start of 2nd jframe
    NewJFrame1 n=new NewJFrame1();
     n.setVisible(true);
     //Stop code for ist jframe
     NewJFrame m=new NewJFrame();
     m.setVisible(false);
     dispose();
    }
0 голосов
/ 20 ноября 2014
private void closeTheCurrentFrameAndOpenNew(java.awt.event.ActionEvent evt){

 dispose();//To close the current window

 YourClassName closeCurrentWindow = new YourClassName();
 closeCurrentWindow.setVisible(true);//Open the new window

}
0 голосов
/ 01 июля 2014

Вы также можете использовать это:

opens_frame frameOld= new opens_frame();
            frameOld.setVisible(true);
            Closing_Frame.setVisible(false);
            Closing_Frame.dispose();
...