【问题标题】:JTextField's getText() to printable variableJTextField 的 getText() 到可打印变量
【发布时间】:2014-03-15 19:35:31
【问题描述】:

我刚刚开始玩 GUI,我正在尝试从用户那里获取文本输入,并将其分配给一个变量以供以后使用。

简单,我想。我错了。

我希望我的框架看起来像:

public class firstFrame extends JFrame {

JTextField f1 = new JTextField();
String text;

public firstFrame(String title) {
    super(title);

    setLayout(new BorderLayout());

    Container c = getContentPane();

    c.add(f1);

    text = f1.getText();

    System.out.println(text);
    }
}

变量text 将获取用户输入的任何文本,然后将其打印到控制台。很简单。

我有一种感觉,我在这里遗漏了一些非常基本的东西,如果有人能告诉我那是什么,我将不胜感激。

【问题讨论】:

  • 在用户输入之前,文本字段中不会有任何文本。当用户输入它时,您需要调用 text = f1.getText(); 向文本字段添加一个 keylistener 并在捕获事件时保存文本。
  • 您想了解的是 Eventhandlers,docs.oracle.com/javase/tutorial/uiswing/events,它监听程序中的组件并在发生某些事情时告诉您,即用户输入。
  • @Martin 我会继续阅读的。谢谢马丁。

标签: java variables user-interface jframe jtextfield


【解决方案1】:

在组件上发生事件之前,不会更新变量。为此,可以使用 DocumentListenerActionListener

f1.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        String text = f1.getText();
        ...
    }
});

【讨论】:

  • 谢谢朋友,也很有帮助。
【解决方案2】:

getText()获取JTextArea被调用时的文本。

您在构造函数中调用它。所以当你实例化new firstFrame时,没有初始文本。

要记住的一点是,GUI 是事件驱动的,这意味着您需要一个事件处理程序来捕获和处理事件。

一种选择是在JTextField 中添加一个ActionListener,这样当您在输入文本后按Enter 时,文本就会打印出来。

f1.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        String text = f1.getText();
        System.out.println(text);
    }
});

Create GUI with SwingWriting Event Listeners查看更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2013-02-10
    • 2015-11-15
    • 2021-06-24
    • 1970-01-01
    • 2018-10-12
    相关资源
    最近更新 更多