2016-10-13 10 views
0

1.의 ActionEvent 실패


는 다른 그것이 바로 메시지를 줄 것이다, 그것은 것입니다 오류 메시지를 제공,이 수는 미리 정의 일치 dosn't 시리얼 number.if을 읽을 수있는 프로그램입니다 그러나, 항상 오류 메시지를 표시합니다. 아무리 시도해도 사전 정의 된 번호와 일치하더라도 오류가 발생합니다. 프로그램이 정상적으로 컴파일되고 내 expection을 넘어서 실행됩니다.

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

+3

가능한 복제 (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Turamarth

+0

내가했습니다 "=="을 ".equals()"로 변경했습니다. 실수는 여전히 존재합니다. – Victor

답변

0

첫 번째 문제점 : ==을 사용하여 문자열을 비교하십시오.

변경

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

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

두 번째 문제

에 다음 텍스트 필드는 다음 비어 이후 무의미 어디 있는지 init를 제외하고 text[i]의 사람들에게 str[i]의 값을 변경하지 않습니다.
if 동안 모두 str[i]은 빈 문자열입니다.
텍스트 필드에 입력 할 때 값을 변경하거나 텍스트 필드에서 직접 문자열을 가져 오는 것이 더 쉬운 방법입니다.

if(text[0].getText().toString().equals("aaa")&&text[1].getText().toString().equals("bbb")&&text[2].getText().toString().equals("ccc")) 
[I 자바에서 문자열을 비교하려면 어떻게합니까?]의
+0

멋지게 해결되었습니다. 감사합니다. – Victor

+0

@Victor이 답변으로 문제가 해결되면 받아 들일 수있는 것으로 표시하십시오. – Turamarth