0

私はActionListenersの使い方を学び、ウィジェットを機能させることを学んでいます。これが私の簡単なプログラムで、入力したものは何でも印刷したいですJTextField

TextViewer1

import javax.swing.JFrame;

public class TextViewer1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        JFrame frame = new TextFrame1();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }

}

TextFrame1

import java.awt.event.ActionListener;
import javax.swing.*;

public class TextFrame1 extends JFrame {
    private static final int FRAME_WIDTH = 300;
    private static final int FRAME_HEIGHT = 200;

    public TextFrame1() {
        createComponents();
        setSize(FRAME_WIDTH, FRAME_HEIGHT);
    }


    private void createComponents() {
        JPanel panel = new JPanel();
        add(panel);

        JTextField textbox = new JTextField(20);
        panel.add(textbox);

        String TYPED = textbox.getText();
        ActionListener sendsText = new TextListener();
        textbox.addActionListener(sendsText);


    }
}

TextListener

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

public class TextListener implements ActionListener {

    /**
     * @param args
     */

    public void actionPerformed(ActionEvent event) {

        System.out.println(TYPED);

    }

}

したがって、問題はTYPED「TextListener」の変数であり、この変数を作成して初期化する必要があります。

なにが問題ですか?

4

2 に答える 2

2

したがって、問題は「Text Listener」の変数 TYPED であり、この変数を作成して初期化する必要があります。

これは、変数が で定義されていないためですTextListenerTYPEDinというローカル変数を作成しますTextFrame1#createComponentsが、これは in では表示されませactionPerformedTextListener

JTextField実際、デフォルトでは空の の最初のテキストに変数を割り当てていますString。コンポーネントの現在のテキストを取得したい場合は、それをコンストラクターに渡すことができます。

class TextListener implements ActionListener {

   private final JTextField textField;
   public TextListener(JTextField textField) {
    this.textField = textField;
   }

   @Override
   public void actionPerformed(ActionEvent event) {

      System.out.println(textField.getText());
   }
}

TextListener次のように作成します。

ActionListener sendsText = new TextListener(textbox);
于 2013-02-10T22:01:17.713 に答える
2

TYPED が変数として宣言されていません。したがって、それを宣言するか、「」で囲みます。

編集: はい、宣言しましたが、TextFrame1 クラス内の createComponents 関数内のローカル変数として。

次のような値を渡す必要があります。

public class TextListener implements ActionListener {
    private String typed;

    public TextListener(String typed) {
        this.typed = typed;
    }

    /**
     * @param args
     */

    public void actionPerformed(ActionEvent event) {

        System.out.println(typed);

    }

}

ああ、変数は大文字ではなく小文字にする必要があります。大文字は定数用です。

編集 2: 悪いことに、そのリスナー コンストラクターは、int 型ではなく String 型を受け入れる必要がありました。コードを修正しました。他の問題については、入力結果をリスナー宣言に渡す必要があるためです。

 ActionListener sendsText = new TextListener(TYPED);

または、次のようにします。

 ActionListener sendsText = new TextListener(textbox.getText());
于 2013-02-10T22:01:31.970 に答える