在打开子窗口的事件前判断HashMap里是否有这个子窗体的名字,有则不去再实例化,而是从HashMap中得到该子窗体的实例,再让他置前/显示。
同时,子窗体销毁事件中,也要将自己从HashMap中对应删除remove.
public static void main(String[] args) throws Exception {JFrame frame = new JFrame("swing test")
frame.setSize(300, 200)
frame.setLayout(null)
JButton btnNewFrame = new JButton("新窗口")
btnNewFrame.setBounds(30, 30, 80, 40)
frame.getContentPane().add(btnNewFrame)
frame.setVisible(true)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)//关闭时,直接退出
btnNewFrame.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成
final JFrame frame = new JFrame("new frame")
frame.setSize(200, 180)
frame.getContentPane().add(new JLabel("this is a new frame"))
frame.setVisible(true)
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
// TODO 自动生成
frame.dispose()//dispose会隐藏窗体并释放窗体所占用的部分资源
}
})
}
})
}
二楼的方法不错,但是楼主可能不懂.最简单的方法就是如果你的子窗口类名是SonFrame在SonFrame中添加一属性public
static
boolean
isshow=false把显示窗口的语句套在if里边if(SonFrame.isshow==false){
//执行显示窗口代码}else{
//不管}但是记得当子窗口关闭后设置属性
SonFrame.isshow=false否则嘿嘿,再按打开就显示不出来了~!