ActionEvent失败

时间:2016-10-13 15:01:25

标签: java actionevent

1

它是一个可以读取序列号的程序。如果它与预定义的数字匹配,它将给出错误消息,否则它将给出正确的消息。但是,它总是给出错误消息,无论我如何尝试,即使它与预定义的数字相匹配,也会产生错误。 程序正常编译,只是超出了我的预期。

2。 的 Judge.java

public class Judge {
    public static void main(String args[])
    {
        Win win=new Win();
        win.setTitle("judge serial number");
        win.setBounds(10,10,460,360);
    }
}

Win.java

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/*contains:
 * 1.three areafield
 * 2.a botton
 * 3.keylistener,focuslistener
 */
public class Win extends JFrame implements ActionListener//Win类用来初始化窗口
{
    JTextField text[]=new JTextField[3]; //三个文本框
    String str[]=new String[5];//字符串数组
    focusPolice focuspolice;    //自定义类2:焦点事件类。
    JButton b;      //确定按钮
                    //构造函数   
    Win() {
          setLayout(new FlowLayout());      //布局类型为FlowLayout型
          b=new JButton("确定");
          this.init();
          add(b);
          text[0].requestFocusInWindow();       //初始化焦点
          setVisible(true); 
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    public void init()
    {
          focuspolice=new focusPolice();    //创建焦点事件类对象
          for(int i=0;i<3;i++)
          {
              text[i]=new JTextField(4);
              text[i].addFocusListener(focuspolice);
              text[i].addKeyListener(focuspolice);
              str[i]=text[i].getText().toString();
              add(text[i]);
          }  
          b.addActionListener(this);
    }

    public void actionPerformed(ActionEvent ae)
            {
                if(ae.getActionCommand().equals("确定"))
                {
                if(str[0]=="aaa"&&str[1]=="bbb"&&(str[2]=="ccc"))
                {
                    JOptionPane.showMessageDialog(b,"正确!","提示框",
                          JOptionPane.INFORMATION_MESSAGE);
                }
                else
                {
                    JOptionPane.showMessageDialog(b,"错误!","提示框",
                          JOptionPane.WARNING_MESSAGE);
                }
                }
            }

    }

focusPolice.java

import java.awt.event.*;
import javax.swing.*;       //既然是要处理事件,那么awt.event必不可少
public class focusPolice implements KeyListener,FocusListener{//不光是需要FocusListener,也需要keyListener
       public void keyPressed(KeyEvent e) {
              JTextField t=(JTextField)e.getSource();
              if(t.getCaretPosition()>=2)           
                  //实验结果:如果输入的字符个数多于3个,将会自动跳焦。
                 t.transferFocus(); 
            }
            public void keyTyped(KeyEvent e) {}
            public void keyReleased(KeyEvent e) {}
            public void focusGained(FocusEvent e) {
              JTextField text=(JTextField)e.getSource();
              text.setText(null); 
            }
            public void focusLost(FocusEvent e){}

}

enter image description here

1 个答案:

答案 0 :(得分:0)

第一个问题:使用==来比较字符串。

更改

if(str[0]=="aaa"&&str[1]=="bbb"&&(str[2]=="ccc"))

if(str[0].equals("aaa")&&str[1].equals("bbb")&&str[2].equals("ccc"))

第二个问题:您永远不会将str[i]的值更改为text[i]的值,除非在init中,因为文本字段为空,因此它是无意义的。
if期间,所有str[i]都是空字符串 在键入文本字段时更改其值或直接从文本字段中获取字符串,这似乎是更简单的方法。

if(text[0].getText().toString().equals("aaa")&&text[1].getText().toString().equals("bbb")&&text[2].getText().toString().equals("ccc"))