假如我有几个窗体,都是继承JFrame,我要在A窗体界面中用按钮事件触发使B窗体弹出来,即new 一个B窗体,但是当我不停的点击按钮时就会弹出好多同样的B窗体,我希望每一次点击按钮时,把上一次的B窗体关闭,重新显示。我原来的代码如下 B b;
if(b==null)//判断b为null时创建一个新的
b= new B();
else
{
b= null; //当b不为null,即窗体已经弹出,把它置为null,但是怎样才能把原来的b关闭,重新刷屏显示新的b?
b= new B(); //新建一个B对象
}不知道我这种思路是否好,或者大家有什么好的方法也可以分享一下
if(b==null)//判断b为null时创建一个新的
b= new B();
else
{
b= null; //当b不为null,即窗体已经弹出,把它置为null,但是怎样才能把原来的b关闭,重新刷屏显示新的b?
b= new B(); //新建一个B对象
}不知道我这种思路是否好,或者大家有什么好的方法也可以分享一下
B b;
if(b==null)//判断b为null时创建一个新的
b= new B();
else
{
b= null; //当b不为null,即窗体已经弹出,把它置为null,但是怎样才能把原来的b关闭,重新刷屏显示新的b?
b= new B(); //新建一个B对象
}
if(b.isVisible()){
b.dispose();
}
b=new B();
b.setVisible(true);
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;public class FrameTest { private boolean visible = false; public FrameTest() {
JFrame f = new JFrame(); final JFrame hideFrame = new JFrame("Hide");
hideFrame.setBounds(200, 200, 300, 300);
final JButton button = new JButton("Show");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
visible = !visible;
button.setText(visible ? "Hide" : "Show");
hideFrame.setVisible(visible);
}
}); f.setSize(300, 150);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(button, BorderLayout.SOUTH);
// f.pack();
f.setVisible(true);
} public static void main(String args[]) {
new FrameTest();
}
}
并不需要每一次重新构建,因为这样的话速度比较慢,效率很差。通常这样的方式不会采用。当然,不排除特殊情况。
你看一下以上代码,希望对你有所帮助。
if(b==null){
b.dispose();
}
b=new B();
b.setVisible(true);否则通过判断B是否显示执行
if(b.isVisible()){
b.dispose();//销毁B,释放资源,清空b
b=new B();
}
//因为b未被清空可以不用创建B,显示出来就好了
b.setVisible(true);
呵呵,请问所谓隐藏和关闭的区别何在?我不认为只有这个窗口被销毁了才是关闭。例如一个模态对话框,只要调用了setVisible(false);那么这个模态窗口将不可见,并解除其所引起的阻塞。那么这个窗口这个时候是否算是关闭呢?至于说节约开销的原因其实也并不是因为没有初始化,如果需要,完全可以将构造函数中的内容抽出来单独组织一个函数,根据需要来决定每次显示的时候所需要显示的状态,例如每一次将各个输入框的内容都清空等。LZ的代码没有使代码可复用。因为每次重新构造的话都要向系统重新申请资源。当然,其优点是节约了空间。而我则没有释放资源,采用的是“空间换时间”的方式。但无法显示的都是同一个B
这一句话,没有看明白~~4楼的兄弟,或者姐妹,能不能再说说,交流一下,共同进步
~~谢谢你~~当然,其实这个问题本身并不复杂,但是却能带来很多思考~~LZ想要的效果其关键在于需要记录一个状态,表示B窗口显示或关闭。做法不唯一,我的一点代码无非是抛砖引玉,希望看到大家的解决方式,共同交流。