Java不会识别定义的变量?

时间:2013-05-28 21:32:36

标签: java

actionPerformed中,根据Eclipse,似乎所有变量(submit,msg,input)都无法解析。根据我的经验(我的经验很少),这意味着我没有定义变量。但是,正如您在代码中看到的那样,我已经定义了它们。 Submit是一个JButton,msg是一个字符串,输入是一个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); 
        }

    }
}

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

P.S。,我正在为我的德语课做一个小文字冒险游戏

5 个答案:

答案 0 :(得分:3)

您在方法one()中将变量定义为 local 变量。根据定义,局部变量是......本地的。它们仅在这里定义的块中可见。要在one()actionPerformed()中显示,应将其定义为该类的字段。

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

答案 1 :(得分:0)

这是因为input方法无法访问submitactionPerformed变量。

制作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) { ... }
}

答案 2 :(得分:0)

这些变量的范围仅为one()方法。如果你想让它们可供全班使用,请将它们放在msg旁边的顶部。

答案 3 :(得分:0)

变量submit被定义为方法one()中的局部变量。

方法actionPerformed()中没有。

答案 4 :(得分: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) {
   }
}