在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。,我正在为我的德语课做一个小文字冒险游戏
答案 0 :(得分:3)
您在方法one()
中将变量定义为 local 变量。根据定义,局部变量是......本地的。它们仅在这里定义的块中可见。要在one()
和actionPerformed()
中显示,应将其定义为该类的字段。
另一种方法是使用one()
方法中定义的匿名内部类来定义你的动作监听器,但鉴于你还没有掌握变量,你最好稍后留下匿名类。 。 Swing是一个复杂的框架,你应该在做Swing之前做一些更基本的编程练习。
答案 1 :(得分:0)
这是因为input
方法无法访问submit
和actionPerformed
变量。
制作input
和submit
变量类成员,如下所示:
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) {
}
}