ActionEvent失效

发布于 2022-09-04 00:28:36 字数 3323 浏览 14 评论 0

1.我的这个程序实现的是:创建一个窗口,模拟输入序列号;按下“确定”按钮就可以弹出提示框(正确或者错误)。我试图用三个监视器。1.焦点监视器和2.键盘监视器监视键盘(当输入超过3个字符时自动更改焦点。);3.一个监视器监视按钮button,当按钮被按下,就比对输入的序列号是否与预先写好的一致。但是结果,永远是不一致,即使输入了正确的序列号。我想知道问题出在哪?
2.
Judge.java


public class Judge {
    public static void main(String args[])
    {
        Win win=new Win();
        win.setTitle("判断序列号");
        win.setBounds(10,10,460,360);
    }
}

Win


import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
//该窗口应该包含以下内容:
//1.三个文本框,每个文本框输入字符数为4
//2.一个提交按钮
// 3.两个事件处理:焦点处理和键盘事件处理

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){}

}

3、4.我输入了我预先设置的答案,仍然提示错误。整个程序并没有报错,但就是和我想要的结果不一样。
clipboard.png

5.我试了某个办法,看文本框中的内容有没有传递给str数组,最后发现并没有。说明问题出在init()方法内部,但是我知识有限,花了很长时间还是没找到哪里错了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦巷 2022-09-11 00:28:36

clipboard.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文