0

EclipseにactionPerformedよると、すべての変数(submit、msg、input)が「解決できない」ようです。私の経験では(ほとんど経験していませんが)、これは変数を定義していないことを意味します。しかし、コードでわかるように、私はそれらを定義しました。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); 
        }

    }
}

一部のインポートが不必要であることは承知しています。

追伸、私はドイツ語のクラスのために小さなテキスト アドベンチャー ゲームを作っています。

4

5 に答える 5

3

メソッドで変数をローカル変数として定義しましたone()。定義上、ローカル変数は... ローカルです。それらは、ここで定義されているブロックでのみ表示されます。one()および で表示するにactionPerformed()は、クラスのフィールドとして定義する必要があります。

別の方法として、メソッドで定義された匿名の内部クラスを使用しone()てアクション リスナーを定義することもできますが、変数をまだマスターしていないことを考えると、匿名クラスはしばらく置いておく方がよいでしょう。Swing は複雑なフレームワークであるため、Swing を実行する前に、基本的なプログラミング演習をいくつか行う必要があります。

于 2013-05-28T21:35:33.447 に答える
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

次のように、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) { ... }
}
于 2013-05-28T21:35:55.950 に答える
0

これらの変数のスコープは one() メソッドのみです。クラス全体で使用できるようにする場合は、上部の msg の隣に配置します。

于 2013-05-28T21:37:23.870 に答える