0

根据actionPerformedEclipse,似乎所有变量(提交、消息、输入)“无法解析”。根据我的经验(我很少),这意味着我没有定义变量。但是,正如您在代码中看到的那样,我已经定义了它们。Submit 是一个 JButton,msg 是一个字符串,input 是一个 JTextField。

package levels;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

import java.util.*;

public class LevelOne extends JFrame implements ActionListener{

    private Object msg;

    public void one(){

        setTitle("Conjugator");
        setSize(400,400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);

        setLayout(new BorderLayout());
        setContentPane(new JLabel(new ImageIcon("images/LevelOneBG.gif")));
        setLayout(new FlowLayout());

        JTextArea area = new JTextArea("You enter a castle. A Goblin demands you correct his sentences!");
        add(area);
        setVisible(true);

        //these aren't being called to actionPerformed
        JButton submit = new JButton("Check sentence");
        submit.addActionListener(this);
        setVisible(true);
        JTextField input = new JTextField("Ich spielen Golf.");
        input.setActionCommand("input");
        add(input);
        input.addActionListener(this);
        setVisible(true);

        String msg = ("Test successful");
    }   

    //this should be successfully locating and utilizing "submit", "input" and "msg", but it won't
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == submit) {
            msg = submit.getText();

            //!!  Display msg only **after** the user has pressed enter.
            input.setText(msg); 
        }

    }
}

我知道我的一些进口是不必要的。

PS,我正在为我的德语课制作一个小型文字冒险游戏

4

5 回答 5

3

您在方法中将变量定义为局部变量one()。根据定义,局部变量是……局部的。它们仅在此处定义的块中可见。为了在one()和 中可见actionPerformed(),它们应该被定义为类的字段。

另一种方法是使用方法中定义的匿名内部类one()来定义您的动作侦听器,但鉴于您还没有掌握变量,您最好稍后再保留匿名类。Swing 是一个复杂的框架,在进行 Swing 之前,您可能应该做一些更基本的编程练习。

于 2013-05-28T21:35:33.447 回答
0

这些变量的范围仅是 one() 方法。如果您希望全班都可以使用它们,请将它们放在 msg 旁边的顶部。

于 2013-05-28T21:37:23.870 回答
0

您需要在方法“One”之外声明变量,例如:

private JButton submit = new JButton("Check sentence");

public void one(){
    // whatever goes there
}

public void actionPerformed(ActionEvent e) {
   // submit is now working 
   if (e.getSource() == submit) {
   }
}
于 2013-05-28T21:40:37.193 回答
0

这是因为inputsubmit变量在方法中不可访问actionPerformed

创建inputsubmit变量类成员,如下所示:

pubilc class LevelOne {
    private JTextField input = new JTextField("Ich spielen Golf.");
    private Object msg;
    private JButton submit = new JButton("Check sentence");


    public void one() { ... }

    public void actionPerformed(ActionEvent e) { ... }
}
于 2013-05-28T21:35:55.950 回答
0

该变量submit在方法中被定义为局部变量one()

它在方法中不可用actionPerformed()

于 2013-05-28T21:38:55.383 回答