有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么这个ActionListener不工作?

我正在学习使用ActionListener并使小部件工作。 这是我的简单程序,我想打印我在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);

    }

}

所以问题是“TextListener”中的变量TYPED,它想要创建这个变量并初始化它

怎么了


共 (2) 个答案

  1. # 1 楼答案

    类型化未声明为变量。所以,要么声明它,要么用“”括起来

    编辑: 是的,您确实声明了它,但它是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类型。我修正了密码。至于您的另一个问题,那是因为您现在需要将输入结果传递给侦听器声明

     ActionListener sendsText = new TextListener(TYPED);
    

    或者干脆做:

     ActionListener sendsText = new TextListener(textbox.getText());
    
  2. # 2 楼答案

    So the problem is the variable TYPED in 'Text Listener', it wants to create this variable and initialise it.

    这是因为变量在^{中未定义。在TextFrame1#createComponents中创建一个名为TYPED的局部变量,但在TextListener中的actionPerformed中不可见

    事实上,您正在将变量分配给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);