2013-12-11 2 views
1

사용자에게 질문을하고 그 질문에 응답 한 다음 다른 질문을하는 JSwing 앱이 있습니다. 내 문제는 첫 번째 질문에 응답 한 후 두 번째 질문이 actionPerformed 메서드에서 나타나지만 응답 변수에 새 대답을 할당하고 if else 문을 시작하는 데 필요한 다음 메서드 (체커 메서드) 초기화하지 않는 것 같습니다. 전체 코드는 다음과 같습니다.다른 메소드 초기화하기

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseAdapter; 

public class hello extends JApplet implements ActionListener{ 
JTextArea questions; 
JTextField answers; 
JPanel panel; 
String response; 

public void init(){ 

    questions = new JTextArea("Hello. State your name: ", 15, 65); 
    questions.setEditable(false); 
    questions.setLineWrap(true); 
    questions.setWrapStyleWord(true); 
    questions.setBackground(Color.black); 
    questions.setForeground(Color.green); 
    questions.setFont(new Font("Monaco", Font.PLAIN, 12)); 

    answers = new JTextField("Type here", 65); 
    answers.setBackground(Color.black); 
    answers.setForeground(Color.green); 
    answers.setFont(new Font("Monaco", Font.PLAIN, 12)); 
    answers.addActionListener(this); 

    panel = new JPanel(); 
    panel.add(questions); 
    panel.add(answers); 
    panel.setSize(480, 280); 
    panel.setBackground(Color.black); 

    getContentPane().add(panel, BorderLayout.CENTER); 

    answers.addMouseListener(new MouseAdapter(){ 
     public void mouseClicked(MouseEvent e){ 
      answers.setText(""); 
     } 
    }); 

} 
    public void actionPerformed(ActionEvent e){ 
     response = answers.getText(); 
     questions.setText("How are you " + response + "?"); 
     answers.setText(""); 
    } 
    public void checker(ActionEvent f){ 
    response = answers.getText(); 
    if(response.equals("well")){ 
    questions.setText("glad to hear it"); 
    } 
    else{ 
     questions.setText("i'm sorry to hear that"); 
    } 
    } 
    } 

모든 의견을 보내 주시면 감사하겠습니다.

답변

1

당신이 actionPerformed가 호출 정말 호출되지 도착 결코 checker 방법을 작성하는 방법에 관한 혼란스러워 보인다.

hello 클래스를 등록하여 ActionListener 인터페이스를 구현했습니다.
JTextField에서 setActionListener(this)을 호출하면 사용자가 enter 키를 누를 때 actionPerformed이 호출됩니다.

예를 들어 "우물"을 입력 한 후 사용자가 다시 Enter 키를 누르기를 원하면 checker이 호출된다고 가정합니다. 그러나 JTextFieldchecker을 인식하지 못하거나 전화를 걸려고하지 않습니다.
actionPerformed 방법의 두 번째 질문에 사용자가 응답하는지 확인할 수 있습니다. 현재 질문의 상태를 확인하기위한 열거 형을 만들 수도 있습니다.

그래서 같은 뭔가 :

private enum Question { FIRST, SECOND }; 
private Question current = FIRST; //can also initiate (but not declare) in init() 
... 
public void actionPerformed(ActionEvent e) { 
    if(current == FIRST) { 
     questions.setText("How are you " + answers.getText() + "?"); 
     answers.setText(""); 
     current = SECOND; 
    } else if(current == SECOND) { 
     if(answers.getText().equals("well")) 
      questions.setText("glad to hear it"); 
     else 
      questions.setText("i'm sorry to hear that"); 
    } 
} 
+0

이것은 작동하지 않는 것 같습니다. 질문이 표시되고 사용자 응답에 대한 응답이 결코 나오지 않는 동일한 문제가 발생합니다. "How are you"+ answers.getText() ...에 대해 JTextField에 입력 한 내용을 대체합니다. – guarrana

+0

당신이 묘사하는 것은 소리가 나지 않습니다 :'actionPerformed'를 한 번만 입력하면'current'가'SECOND'가되고, 다시 "How are you ..."로 다시 설정할 수 없습니다. 'current = FIRST'가 어딘가에 있지 않으면 계속 호출됩니다. – itchy23

+0

주위를 둘러 보면서 일하는 것 같습니다. 감사합니다 – guarrana

1

[...]하지만 에 필요한 다음 방법 (검사 방법), 응답 변수에 새로운 답을 할당하고 경우 다른 문을 시작, 초기화하지 않는 것 같습니다. 그것을 않습니다,

  • checker() 방법은 인수로 ActionEvent를 필요로하지 않습니다

그럼 당신은 실행 결코 :

일부 주제에서 벗어난 팁을 다음 코드에서 checker() 메소드를 호출하지 ?

  • 아마도 사용자의 모든 입력에 텍스트를 덮어 쓰지 않고 텍스트 영역에 응답을 추가하려고합니다. JTextArea.append() 방법을보십시오.
  • answers에 첨부 된 내용이 answers인데, 사용자가이 텍스트 필드를 포커스 할 때 텍스트가 명확하면 FocusListener을 첨부하고 focusGained() 메서드 내에서 텍스트를 지우는 것이 좋습니다.
  • 1
    panel = new JPanel(); 
        panel.setLayout(new BorderLayout(0, 0)); 
        panel.add(questions, BorderLayout.CENTER); 
        panel.add(answers, BorderLayout.SOUTH); 
        panel.setSize(480, 280); 
        panel.setBackground(Color.black); 
    

    이 시도. 패널의 기본 레이아웃은 플로우 레이아웃입니다. answersquestions은 너무 커서 표시 할 수 없습니다. borderLayout으로 레이아웃을 설정하면 크기가 조정됩니다.

    +0

    이 팁 주셔서 감사합니다. – guarrana