我写了两个窗体,一个主窗体,一个登陆窗体。当我点登陆窗体的关闭按钮时,主窗体也跟着一起关闭了。
请各位高手解答一下!

解决方案 »

  1.   

    import javax.swing.*;
    import javax.swing.tree.*;
    import java.awt.event.*;
    import java.awt.*;class MFrame extends JFrame
    {
    private LoginFrame lf;
    private  JScrollPane p;
    private Container c;

    JMenuBar menuBar = new JMenuBar();
    JMenu menuFile = new JMenu("File");
    JMenu menuOperate = new JMenu("Operate");
    JMenuItem loginMenuItem = new JMenuItem("Login",'L');
    JMenuItem exitMenuItem = new JMenuItem("Exit",'E');

    public MFrame()
    {
    //设置菜单
    menuBar.add(menuFile);
    menuFile.add(loginMenuItem);
    menuFile.addSeparator();
    menuFile.add(exitMenuItem);
    menuBar.add(menuOperate);
    this.setJMenuBar(menuBar);
        
    //设置事件监听
    loginMenuItem.addActionListener(new MyActionListener());
    exitMenuItem.addActionListener(new MyActionListener());
    setTitle("购物管理系统");
    setSize(600,400);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.addWindowListener(new WindowAdapter(){
           public void windowClosing(WindowEvent e)
           {
           System.exit(0);
           }
           });
    }
    private class MyActionListener implements ActionListener
    {
    public void actionPerformed(ActionEvent e)
    {
    if(e.getSource()==loginMenuItem)
    {
    LoginFrame lf = new LoginFrame();
    lf.show();
    }
    else if(e.getSource()==exitMenuItem)
    {
    System.exit(0);
    }
    else
    System.exit(0);
    }
    }

    }
    class LoginFrame extends JFrame
    {    private JButton benter;
    private JButton bcancel;
    private Label lname;
    private Label lpassword;
    private JTextField tname;
    private JPasswordField tpassword;
    private JPanel p;
    private Container c; 

    public LoginFrame()
    {
    setTitle("登录");
    setSize(300,200);
    addContral();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.addWindowListener(new WindowAdapter(){
           public void windowClosing(WindowEvent e)
           {
           System.exit(0);
           }
           });
        
            //设置事件监听
        benter.addActionListener(new MyActionListener());
        bcancel.addActionListener(new MyActionListener());
    }

    public void addContral()
    {
     benter = new JButton("确定");
     bcancel = new JButton("取消");
     lname = new Label("请输入你的昵称");
     lpassword = new Label("请输入你的密码");
     tname = new JTextField();
     tpassword = new JPasswordField(10);
     p = new JPanel(new GridLayout(3, 2));
     c = this.getContentPane();
     c.setLayout(new FlowLayout());
     p.add(lname);
     p.add(tname);
     p.add(lpassword);
     p.add(tpassword);
     p.add(benter);
     p.add(bcancel);
     c.add(p);
    }

    class MyActionListener implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
    {
    if(event.getSource()==benter)
    {
    JOptionPane.showMessageDialog(null,"登录成功!");
    }
    else if(event.getSource()==bcancel)
    {
    System.exit(0);
    }
    }
    }
    }public class MainFrame { public static void main(String[] args) {
    MFrame mf = new MFrame();
    mf.show();
    }
    }
      

  2.   

    用等号比较对象????要用这个滴:
    event.getSource().equals()----------------------------------------------------------------------
    private class MyActionListener implements ActionListener
    {
    public void actionPerformed(ActionEvent e)
    {
    if(e.getSource().equals(loginMenuItem))
    {
    LoginFrame lf = new LoginFrame();
    lf.show();
    }
    else if(e.getSource().equals(exitMenuItem))
    {
    System.exit(0);
    }
    else
    System.exit(0);
    }
    }

      

  3.   

    import javax.swing.*;
    import javax.swing.tree.*;
    import java.awt.event.*;
    import java.awt.*;class MFrame extends JFrame
    {
    private LoginFrame lf;
    private  JScrollPane p;
    private Container c;

    JMenuBar menuBar = new JMenuBar();
    JMenu menuFile = new JMenu("File");
    JMenu menuOperate = new JMenu("Operate");
    JMenuItem loginMenuItem = new JMenuItem("Login",'L');
    JMenuItem exitMenuItem = new JMenuItem("Exit",'E');

    public MFrame()
    {
    //设置菜单
    menuBar.add(menuFile);
    menuFile.add(loginMenuItem);
    menuFile.addSeparator();
    menuFile.add(exitMenuItem);
    menuBar.add(menuOperate);
    this.setJMenuBar(menuBar);
        
    //设置事件监听
    loginMenuItem.addActionListener(new MyActionListener());
    exitMenuItem.addActionListener(new MyActionListener());
    setTitle("购物管理系统");
    setSize(600,400);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.addWindowListener(new WindowAdapter(){
           public void windowClosing(WindowEvent e)
           {
           System.exit(0);
           }
           });
    }
    private class MyActionListener implements ActionListener
    {
    public void actionPerformed(ActionEvent e)
    {
    if(e.getSource()==loginMenuItem)
    {
    LoginFrame lf = new LoginFrame();
    lf.show();
    }
    else if(e.getSource()==exitMenuItem)
    {
    System.exit(0);
    }
    else
    System.exit(0);
    }
    }

    }
    class LoginFrame extends JFrame
    {    private JButton benter;
    private JButton bcancel;
    private Label lname;
    private Label lpassword;
    private JTextField tname;
    private JPasswordField tpassword;
    private JPanel p;
    private Container c; 

    public LoginFrame()
    {
    setTitle("登录");
    setSize(300,200);
    addContral();
    /*this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  楼主主要问题处在这里了,这个方法和下面的那个事件监听,都是用来中止应用程序的。注释掉就没问题了!
        this.addWindowListener(new WindowAdapter(){
           public void windowClosing(WindowEvent e)
           {
           System.exit(0);
           }
           });*/
        
            //设置事件监听
        benter.addActionListener(new MyActionListener());
        bcancel.addActionListener(new MyActionListener());
    }

    public void addContral()
    {
     benter = new JButton("确定");
     bcancel = new JButton("取消");
     lname = new Label("请输入你的昵称");
     lpassword = new Label("请输入你的密码");
     tname = new JTextField();
     tpassword = new JPasswordField(10);
     p = new JPanel(new GridLayout(3, 2));
     c = this.getContentPane();
     c.setLayout(new FlowLayout());
     p.add(lname);
     p.add(tname);
     p.add(lpassword);
     p.add(tpassword);
     p.add(benter);
     p.add(bcancel);
     c.add(p);
    }

    class MyActionListener implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
    {
    if(event.getSource()==benter)
    {
    JOptionPane.showMessageDialog(null,"登录成功!");
    }
    else if(event.getSource()==bcancel)
    {
    System.exit(0);
    }
    }
    }
    }public class MainFrame { public static void main(String[] args) {
    MFrame mf = new MFrame();
    mf.show();
    }
    }