setVisible(false)不会隐藏Java swing Jframe

时间:2019-05-23 16:44:24

标签: java swing jframe

我今天才刚开始用Java swing进行编码,所以我非常新手,如果我的问题很愚蠢,对不起。我已经在网上搜索了很多,但是什么也没找到。

我的问题是我无法让setVisible(false)看不见Jfraim。

代码非常简单。一个仅带有按钮的窗口,在单击该按钮后将显示一个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);

    }

}

我不知道我在做什么错。我所做的一切都和this youtube video一样,但是单击按钮后,我的窗口将不可见。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

尝试一下。

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实例内。但是,如果您不打算覆盖某些内容,则最好是继承优先于组成。