Java 如何使用Swing接口从键盘读取值

Java 如何使用Swing接口从键盘读取值,java,swing,compiler-errors,jtextfield,Java,Swing,Compiler Errors,Jtextfield,我正在寻找一个简单的例子来解释如何从文本字段中读取一个简单的值,以便在我的程序中使用。我看到了很多复杂的例子,有很多行,但不幸的是,我没有找到一个简单的例子来说明我的意思。我有一个简单的用户界面:一个文本字段和一个按钮。我在文本字段中键入一些内容,然后单击按钮,我希望该变量是程序中声明的第一个变量,具有文本字段中的值。我写了一个程序,但我得到了一个错误按摩从一个内部类的局部变量必须是最终的,请有人来帮助我 package arbitru; import java.awt.Dimension;

我正在寻找一个简单的例子来解释如何从文本字段中读取一个简单的值,以便在我的程序中使用。我看到了很多复杂的例子,有很多行,但不幸的是,我没有找到一个简单的例子来说明我的意思。我有一个简单的用户界面:一个文本字段和一个按钮。我在文本字段中键入一些内容,然后单击按钮,我希望该变量是程序中声明的第一个变量,具有文本字段中的值。我写了一个程序,但我得到了一个错误按摩从一个内部类的局部变量必须是最终的,请有人来帮助我

package arbitru;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Listen1 {
    public static void main(String[] args) {
        
        String a; //variable 
        
        JFrame f=new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(new Dimension(300,300));
        
        JPanel panou=new JPanel();
        panou.setLayout(new FlowLayout());
        
        JLabel leb=new JLabel("Message");
        JButton butt=new JButton("Record");
        JTextField text=new JTextField(20);
        
        panou.add(leb);
        panou.add(text);
        panou.add(butt);
        
        butt.addActionListener(new ActionListener(){
        @Override
            public void actionPerformed(ActionEvent e){
                a=text.getText();
            }
            });
        
        System.out.println(a);
        
        f.getContentPane().add(panou); 
        f.setVisible(true);
        
    }
}
你不能像这样用20

 JTextField text=new JTextField(20);
您需要首先调用构造函数 然后将文本字段设置为20

        JTextField text=new JTextField();
        text.setText("20");
显然,您需要将字符串转换为最后一个单元素数组 这里有一个解释:

p、 s:
如果您不熟悉java gui,我会使用netBeans重新编译您的代码,但是您不能在该操作侦听器的范围内分配变量a

快速修复:

public class Listen1 {

    private static String a; // moved the variable here 

    public static void main(String[] args) {
        
       // ... same code as before apart from the variable
        
    }
}
而且system.out会一直打印空值。
如果要在按下按钮时打印出值;然后将System.print移动到actionlistener

不工作,关闭Swing窗口后,我想为变量显示新值,我给System.out.printlna命令,但不要在我的程序输出中显示值。你不能像这样使用20当然可以!如果您不熟悉java gui,我建议您使用netBeans如果您不熟悉编程或回答问题,我建议您使用API文档。为它的大部分创建一个构造函数。将a字段设为类属性。我无法解释为什么?在语句中添加“?”不会使其成为一个问题,这与扩展您的问题不会使其成为一个答案的方式非常相似!使用实际问题区域左下方的链接进行更新;除非你能解释使用静态的设计逻辑/必要性,否则你就是在滥用它。不要。做就像我说的,代码是一个快速的解决方法,要从静态的主块中访问变量,变量必须是静态的。我不是说这是一个好的设计,这是一个不同的故事。。。
public class Listen1 {

    private static String a; // moved the variable here 

    public static void main(String[] args) {
        
       // ... same code as before apart from the variable
        
    }
}