import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TextField extends JFrame
{
    private JLabel lbl1 = new JLabel("姓名");
    private JLabel lbl2 = new JLabel("密码");
    private JButton btnLogin = new JButton("登录");
    private JButton btnExit = new JButton("退出");
    private JPasswordField field1 = new JPasswordField(10);
    private JTextField field2 = new JTextField(10);
        public TextField(String title)
    {
       super(title);
       Container container = getContentPane();
       container.setLayout(new FlowLayout());       container.add(lbl1);
       container.add(field2);       container.add(lbl2);
       container.add(field1);       //注册时间监听器
       HandEvent ev = new HandEvent();
       field1.addActionListener(ev);
       field2.addActionListener(ev);       container.add(btnLogin);
       container.add(btnExit);       JDialog.setDefaultLookAndFeelDecorated(true);
       
       btnLogin.addActionListener(ev);
       btnExit.addActionListener(ev);       setSize(400,300);
       setVisible(true);
    }
    
   
    public class HandEvent implements ActionListener
    {
        String output = " ";
        
        public void actionPerformed(ActionEvent event)
        {
             if(event.getSource()==field2)
               JOptionPane.showMessageDialog(null,"你的姓名是:"+event.getActionCommand());
  
             else if(event.getSource()==field1)
               JOptionPane.showMessageDialog(null,"密码是:"+event.getActionCommand());             else if(field1.getText().toString().equals("") & field2.getText().toString().equals(""))
             {
                 JOptionPane.showConfirmDialog(TextField.this,"用户名和密码不能为空!!!","警告",JOptionPane.YES_NO_OPTION,JOptionPane.ERROR_MESSAGE);
             }             else if(field2.getText().toString().equals(""))
             {
                 JOptionPane.showConfirmDialog(TextField.this,"用户名不能为空!!!","警告",JOptionPane.YES_NO_OPTION,JOptionPane.ERROR_MESSAGE);
             }             else if(field1.getText().toString().equals(""))
             {
                 JOptionPane.showConfirmDialog(TextField.this,"密码不能为空!!!","警告",JOptionPane.YES_NO_OPTION,JOptionPane.ERROR_MESSAGE);
             }            else if(event.getSource() == btnExit)
            {
                 System.exit(0);
            }
        }
    }    public static void main(String[] args)
    {
       JFrame.setDefaultLookAndFeelDecorated(true);
       TextField fi = new TextField("Login");
       fi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
    }
}请问 一下大家我按退出按钮怎么不起做用啊!就是如果姓名和密码为空的话,还要弹出其他的对话框,而不是直接退出的!所以我觉得很奇怪!难道逻辑有什么问题吗!按道理说不论用户名和密码是否为空,只要已经点击了退出按钮,就应该退出啊!

解决方案 »

  1.   

    把类(TextField)改个名字吧 
    它是现存的
      

  2.   


     else if (field1.getText().toString().equals("") &
                         field2.getText().toString().equals("")) {
                    JOptionPane.showConfirmDialog(TextField.this, "用户名和密码不能为空!!!",
                                                  "警告", JOptionPane.YES_NO_OPTION,
                                                  JOptionPane.ERROR_MESSAGE);
                }            else if (field2.getText().toString().equals("")) {
                    JOptionPane.showConfirmDialog(TextField.this, "用户名不能为空!!!",
                                                  "警告", JOptionPane.YES_NO_OPTION,
                                                  JOptionPane.ERROR_MESSAGE);
                }            else if (field1.getText().toString().equals("")) {
                    JOptionPane.showConfirmDialog(TextField.this, "密码不能为空!!!", "警告",
                                                  JOptionPane.YES_NO_OPTION,
                                                  JOptionPane.ERROR_MESSAGE);
                }你在这里做的判断就是如果为空弹出提示框啊
    可以这样修改:
    1、监听器中加一个判断,判断点击的是登录或是退出按钮,然后执行不同的操作
    2、分别针对登录及退出做不同的监听器处理
      

  3.   

    错了 和类名无关
    不知道lz是要按“退出”按钮直接退出还是间接退出还是不退出还是其他什么现在测试下来的情况是
    1.只要用户名框和密码框有任一个为空 按退出按钮就会跳出对话框 无法退出
    2.两者均不为空按退出有效 立即退出
    3.按右上角X 不管什么情况 都直接退出如果你要按退出键不管怎么样都退出就应该在回调函数的前几个if分支中加入退出代码
      

  4.   

    由于你是用同一个事件监听器,你把按钮的判断放在对文本的判断的前面就好了,因为你每次有actionPerformed时,你判断文本,并且成立,自然,你后面对按钮事件的判断语句不能执行了!
      

  5.   

     else   if(event.getSource()   ==   btnExit) 
                            { 
                                      System.exit(0); 
                            } 
    把这个写成判断条件的第一个条件就好了
    if(event.getSource()   ==   btnExit) 
      { 
       System.exit(0); 
      } 
    其他的为else if
      

  6.   

    将退出按钮的事件放到别的事件之前去:
    即:
    if(是否退出==退出){
      退出
    }else{
      判断其他事件
    }