比如说我定义了一个类
public class gui
   {
      gui1();//创建窗口2的函数
       gui2();//创建窗口2的函数
    }
窗口1有一个按钮button我要点击这个按钮,然后窗口1关闭,窗口2关闭
我现在对button按钮添加一个ActionListener
button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){gui2();}});现在出现的问题是窗口1(gui1)与窗口2(gui2)的界面重叠慌乱button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();gui2();}});
这样就会窗口1关闭窗口2出不来 

解决方案 »

  1.   

    你的窗口是用什么元件的 ?建议把两个方法写在两个类里面  这样调用和修改都方便。button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){第一个窗口.dispose();gui2();}});   试试
      

  2.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class CheShi extends JFrame //implements ActionListener
    {
    public CheShi()
    {
    initFirstIn();
    setVisible(true);
    setLocation(300,300);
    setSize(450,250);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }


    public void initFirstIn()
    {
    setTitle("登录");
    setLayout(new GridBagLayout());//网格布局
    JButton bLogin=new JButton("登录");
    JButton bBaseInfo=new JButton("基本信息");
    JButton bAttendInfo=new JButton("出勤信息");
    JButton bTransferInfo=new JButton("调动信息");
    JButton bSure=new JButton("确定");
    JButton bCancel=new JButton("取消");
    JLabel lAccount=new JLabel("帐号");
    JLabel lPassword=new JLabel("密码");
    JTextField tAccount=new JTextField(8);
    JPasswordField tPassword=new JPasswordField(8);
    setLayout(new GridBagLayout());
    Insets insets =new Insets(2, 2, 2, 2);
    //  gridx,  gridy,  gridwidth,  gridheight, weightx,  weighty,
    // //指定组件应置于其显示区域中anchor, 组件完全填满其显示区域fill, //填塞 insets,  ipadx,  ipady 
    add(bLogin,new GridBagConstraints   (0,0,1,1,100,100,GridBagConstraints.CENTER,GridBagConstraints.BOTH,insets,0,0));
    add(bBaseInfo,new GridBagConstraints   (0,1,1,1,0,100,    GridBagConstraints.CENTER,GridBagConstraints.BOTH,insets,0,0));
    add(bAttendInfo,new GridBagConstraints (0,2,1,1,0,100,    GridBagConstraints.CENTER,GridBagConstraints.BOTH,insets,0,0));
    add(bTransferInfo,new GridBagConstraints (0,3,1,1,0,100,    GridBagConstraints.CENTER,GridBagConstraints.BOTH,insets,0,0));
    add(lAccount,new GridBagConstraints (1,0,1,1,100,0,  GridBagConstraints.EAST,GridBagConstraints.NONE,insets,5,5));
    add(lPassword,new GridBagConstraints(1,1,1,1,0,0,    GridBagConstraints.EAST,GridBagConstraints.NONE,insets,5,5));
    add(tAccount,new GridBagConstraints (2,0,1,1,100,0,  GridBagConstraints.WEST,GridBagConstraints.NONE,insets,5,5));
    add(tPassword,new GridBagConstraints(2,1,1,1,0,0,    GridBagConstraints.WEST,GridBagConstraints.NONE,insets,5,5));
    add(bSure,new GridBagConstraints    (1,3,1,1,0,0,  GridBagConstraints.EAST,GridBagConstraints.NONE,insets,5,5));
    add(bCancel,new GridBagConstraints  (2,3,1,1,0,0,    GridBagConstraints.CENTER,GridBagConstraints.NONE,insets,5,5));
    }

    public void initLogin()
    {
    setTitle("登录成功");
    setLayout(new GridBagLayout());//网格布局
    JButton bLogin=new JButton("登录"); 
    JButton bBaseInfo=new JButton("基本信息");
    JButton bAttendInfo=new JButton("出勤信息");
    JButton bTransferInfo=new JButton("调动信息");
    JButton bModefyAccount=new JButton("修改帐号");
    JButton bCancel=new JButton("退出");
    JLabel jlabel=new JLabel("登录成功");
    bCancel.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);;initFirstIn();}});
    jlabel.setFont(new Font("Serif",Font.PLAIN,25));//要设置字体
    setLayout(new GridBagLayout());
    Insets insets =new Insets(2, 2, 2, 2);
    //  gridx,  gridy,  gridwidth,  gridheight, weightx,  weighty,
    // //指定组件应置于其显示区域中anchor, 组件完全填满其显示区域fill, //填塞 insets,  ipadx,  ipady 
    add(bLogin,new GridBagConstraints      (0,0,1,1,100,100,GridBagConstraints.WEST,GridBagConstraints.NONE,insets,65,18));
    add(bBaseInfo,new GridBagConstraints   (0,1,1,1,0,100,    GridBagConstraints.WEST,GridBagConstraints.NONE,insets,40,18));
    add(bAttendInfo,new GridBagConstraints (0,2,1,1,0,100,    GridBagConstraints.WEST,GridBagConstraints.NONE,insets,40,18));
    add(bTransferInfo,new GridBagConstraints(0,3,1,1,0,100,    GridBagConstraints.WEST,GridBagConstraints.NONE,insets,40,18));
        add(jlabel,new GridBagConstraints      (1,1,2,1,0,100,    GridBagConstraints.CENTER,GridBagConstraints.NONE,insets,0,10));
    add(bModefyAccount,new GridBagConstraints      (1,3,1,1,0,100,  GridBagConstraints.EAST,GridBagConstraints.NONE,insets,0,5));
    add(bCancel,new GridBagConstraints    (2,3,1,1,100,0,    GridBagConstraints.WEST,GridBagConstraints.NONE,insets,20,5));
    }
    public static void main(String args[])
    {

    CheShi gu=new CheShi();

    }
    }
      

  3.   

    我刚刚执行过了,可以弹出第2个窗口阿,修改的代码如下JButton bLogin=new JButton("login");
    bLogin.addActionListener(new ActionListener(){ @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    self.dispose();
    JFrame frame = new JFrame();
    //frame.setContentPane(test1);
    frame.setPreferredSize(new Dimension(400,400));
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
    }

    });
      

  4.   

    阿,我明白了,你写的根本不是在两个frame上打开,而是在一个frame中删除旧的布局组件,然后重新布局,而且贴出的代码少ActionListener啊
    下面说说解决办法:
    先增加引向自身的引用:
    private CheShi self = this;
    在initFirstIn函数中为bSure增加监听器:JButton bSure=new JButton("ok");
    bSure.addActionListener(new ActionListener(){ @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    self.getContentPane().removeAll();
    self.repaint();
    initLogin();
    }

    });
    然后就实现你说的效果了。
      

  5.   

    还是少了一个修改的地方,在initLogin函数的最后,增加一行代码
    this.validate();