动作事件失败
ActionEvent failure
1.
是一个可以读串口的程序number.if 和预定义的号码不匹配会报错,否则会报错message.however,总是给出错误消息,无论我如何尝试,即使它与预定义的数字匹配,它也会给出错误。
程序编译正常,只是运行出乎我的意料
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){}
}
第一个问题:使用 ==
比较字符串。
改变
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"))
1.
是一个可以读串口的程序number.if 和预定义的号码不匹配会报错,否则会报错message.however,总是给出错误消息,无论我如何尝试,即使它与预定义的数字匹配,它也会给出错误。 程序编译正常,只是运行出乎我的意料
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){}
}
第一个问题:使用 ==
比较字符串。
改变
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"))