Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打印JTextField会在控制台上显示空白_Java_Swing_Java 8_Jtextfield - Fatal编程技术网

Java 打印JTextField会在控制台上显示空白

Java 打印JTextField会在控制台上显示空白,java,swing,java-8,jtextfield,Java,Swing,Java 8,Jtextfield,我是Java新手,刚刚试用过Java的swing,我尝试制作一个登录表单,将JTextField的内容打印到控制台,但是当我尝试时,控制台没有显示任何内容 这是我的密码: import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JTextField; imp

我是Java新手,刚刚试用过Java的swing,我尝试制作一个登录表单,将JTextField的内容打印到控制台,但是当我尝试时,控制台没有显示任何内容

这是我的密码:


import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;

public class JavaTextField {

    private JFrame frame;
    private JTextField text1;
    private JTextField text2;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    JavaTextField window = new JavaTextField();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public JavaTextField() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        
        text1 = new JTextField();
        text1.setBounds(114, 38, 122, 40);
        frame.getContentPane().add(text1);
        text1.setColumns(10);
        String majorText = text1.getText();
        
        
        text2 = new JTextField();
        text2.setBounds(114, 117, 86, 20);
        frame.getContentPane().add(text2);
        text2.setColumns(10);
        String minorText = text2.getText();
        
        JButton btnButton = new JButton("Button");
        btnButton.setBounds(132, 192, 159, 40);
        frame.getContentPane().add(btnButton);
        btnButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println(majorText);
                System.out.println(minorText);
            }
            }
    );
}
    }

如果有人能给我指出正确的方向,我很高兴,因为我还没有在互联网上看到这个问题的解决方案。

这里的问题是,您在错误的时间从
JTextField
检索内容。当前,在初始化组件时正确调用
getText()
。当然,从
getText()
返回的内容将是一个空的
字符串

因此,要解决逻辑中的问题,您应该只在按下
JButton
后,从
JTextField
s中检索
majorText
minorText
。因为在那个时候,当你按下按钮时,你的文本字段的内容应该是正确的。为此,将文本检索移动到
ActionListener

更新后的
ActionListener
应如下所示:

btnButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String majorText = text1.getText();
        String minorText = text2.getText();
        System.out.println(majorText);
        System.out.println(minorText);
    }
}
或者简单地说:

btnButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println(text1.getText());
        System.out.println(text2.getText());
    }
}
旁注(另一个答案也提到了这一点):


非常不鼓励使用
null
布局,因为它经常会导致不必要的错误。查看可用的不同版本以及如何和何时使用它们。

代码中有一些改进:

  • 避免使用
    null布局
    setBounds(…)
    ,请参阅和a以及使用

  • 您的
    majorText
    在单击按钮之前获取文本,此时文本为空且从不更新,您需要在单击按钮时获取文本,因此移动此行:

    String majorText = text1.getText();
    
    在您的
    actionListener
    中,对于
    minorText

  • 如果您使用Java8标记了您的问题,那么您可以使用Java8Lambdas重写您的侦听器

    btnButton.addActionListener(e -> {
        String majorText = text1.getText();
        String minorText = text1.getText();
        System.out.println(majorText);
        System.out.println(minorText);
    }