Java Swing Jframe не будет невидимым с помощью setVisible (false) - PullRequest
0 голосов
/ 23 мая 2019

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

Моя проблема в том, что я не могу сделать Jfraim невидимым setVisible(false).

Код очень прост. окно только с кнопкой, которая после нажатия на нее покажет showMessageDialog «Hello World», и я хочу, чтобы окно было невидимым после этого.

вот мой код:

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Temp extends JFrame{
    private JPanel panel1;
    private JButton button1;

    private Temp() {
        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                setVisible(false);
                JOptionPane.showMessageDialog(null, "Hello World");
            }
        });
    }


    public static void main(String[] args) {
        JFrame tempWindow = new JFrame("TempWindow");
        tempWindow.setContentPane(new Temp().panel1);
        tempWindow.setLocationRelativeTo(null); // this line set the window in the center of the screen
        tempWindow.setDefaultCloseOperation(tempWindow.EXIT_ON_CLOSE);
        tempWindow.pack();
        tempWindow.setVisible(true);

    }

}

Я не знаю, что я делаю не так. Я сделал все, как это видео на YouTube , но мое окно не станет невидимым после нажатия кнопки.

любая помощь будет оценена.

1 Ответ

2 голосов
/ 23 мая 2019

Попробуйте это.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Temp {
   private JPanel  panel1;
   private JButton button1;

   JFrame          tempWindow = new JFrame("TempWindow");

   private Temp() {
      button1 = new JButton("Button");
      tempWindow.add(button1);
      button1.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
            tempWindow.setVisible(false);
            JOptionPane.showMessageDialog(null, "Hello World");
         }
      });
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(() -> new Temp().start());

   }

   public void start() {
      tempWindow.setLocationRelativeTo(null); // this line set the window in the
                                              // center of the screen
      tempWindow.setPreferredSize(new Dimension(500, 500));
      tempWindow.setDefaultCloseOperation(tempWindow.EXIT_ON_CLOSE);
      tempWindow.pack();
      tempWindow.setLocationRelativeTo(null); // centers on screen
      tempWindow.setVisible(true);

   }

}
  • Я удалил панель, потому что не нужно было демонстрировать решение
  • Я также создал кнопку, так как вы не
  • Также считается плохой практикой расширять JFrame. Лучше расширить JPanel и поместить экземпляр в экземпляр JFrame. Но если вы не собираетесь что-то переопределять, лучше отдать предпочтение композиции, а не наследованию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...