初始化另一种方法

时间:2013-12-11 00:10:33

标签: java swing methods japplet

我有一个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");
     }
    }
  }

我们非常感谢任何建议。

3 个答案:

答案 0 :(得分:1)

  

[...]但是下一个方法(检查方法),这是必需的   将新答案分配给响应变量并开始if else   声明,似乎没有初始化。

那么你永远不会在你的代码中调用checker()方法然后它永远不会被执行:)

一些非主题提示:

  • checker()方法不需要ActionEvent作为参数,是吗?
  • 也许您希望将答案附加到文本区域,而不是在用户的每个输入中覆盖其文本。看看JTextArea.append()方法。
  • 关于MouseListener附加answers,如果目标明确了用户关注此文字字段时的文字,那么我建议您附上FocusListener并在{{3}内清除其文字而不是方法。

答案 1 :(得分:1)

您似乎对如何调用actionPerformed感到困惑,并创建了一个永远不会被调用的checker方法。

您已注册hello课程以实施ActionListener界面 也就是说,通过在setActionListener(this)上调用JTextField,当用户按Enter键时,将调用actionPerformed

我假设您希望用户在输入“well”后第二次按Enter键,并且将调用checker。但是,您的JTextField无法识别checker,也无法调用它 您可以检查用户是否在使用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");
    }
}

答案 2 :(得分: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可以调整其大小。