Java jFrame中窗体的使用setVisible(false)后窗体不隐藏该怎么解决?(附测试源码)

public class aa extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JButton jButton = null;
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(80, 110, 114, 32));
jButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
bb secondform=new bb();
aa firstform=new aa();
secondform.setVisible(true); //显示第二个窗体
firstform.setVisible(false); //同时隐藏第一个窗体,但执行后,该窗体没有隐藏。
}
});
}
return jButton;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
SwingUtilities.invokeLater(new Runnable() {
public void run() {
aa thisClass = new aa();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
/**
* This is the default constructor
*/
public aa() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
}

第1个回答  2013-08-16
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JFrameHideShow extends JFrame {
private static final long serialVersionUID = 1L;
public JFrameHideShow(String title) {
super("JFrameHideShow - "+title);
setSize(400, 200);
JButton jButton = new JButton(title);
this.add(jButton);

jButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
JButton btn=(JButton)e.getSource();
if(title1.equals(btn.getText()) ){
secondform.setVisible(true); //显示第二个窗体
firstform.setVisible(false); //同时隐藏第一个窗体,但执行后,该窗体没有隐藏。
}else{
firstform.setVisible(true); //同时隐藏第一个窗体,但执行后,该窗体没有隐藏。
secondform.setVisible(false); //显示第二个窗体
}
}
});
}

private static final String title1="AA";
private static final String title2="BB";
private static JFrameHideShow firstform;
private static JFrameHideShow secondform;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
firstform = new JFrameHideShow(title1);
firstform.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
secondform = new JFrameHideShow(title2);
secondform.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

firstform.setVisible(true);
}
});
}
}

请参考一个例子——使用静态变量,不是太好,但只是作为简单的例子
第2个回答  2013-08-16
首先,不该在窗体上显示或者隐藏,而是应该将按钮放在面板上,面板放到窗体里。
通过切换面板,来实现你的要求

窗体永远只有一个,而里面可以有多种面板(panel)追问

非常感谢,不过昨天经研究后发现,问题出在了aa firstform=new aa();这句话,这个是告诉系统在新建一个firstform,然后将firstform进行隐藏,而不是对当前的窗口进行隐藏,最后直接用setVisible(false);之后,问题解决,非常感谢

本回答被网友采纳
第3个回答  2013-08-16
aa firstform=new aa();
每次都是新实例来的、可不可见,无关要紧。怎么可能隐藏第个呢。本回答被提问者采纳
相似回答