0

我只是在学习使用ActionListeners 并使小部件工作。这是我的简单程序,我想打印我输入的任何内容JTextField.

文本查看器1

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);

    }

}

文本框1

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);


    }
}

文本监听器

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,它想要创建这个变量并初始化它。

这是因为该变量在您的TextListener. 您创建了一个名为TYPEDin的局部变量,TextFrame1#createComponents但这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:我的错,那个监听器构造函数应该接受 String 类型,而不是 int 类型。我修复了代码。至于您的其他问题,那是因为您现在需要将输入结果传递给侦听器声明。

 ActionListener sendsText = new TextListener(TYPED);

或者只是这样做:

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