输入抛出JFrame,但未返回任何结果

时间:2019-01-06 18:15:25

标签: java user-interface jframe

我想创建一个类似于JOptionPane输入窗口的窗口。目标是在任何其他类中使用该类作为输入方式。我希望每个人都能听懂我的英语; D. 我有两节课:

代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class UI03 extends JFrame{
    private JLabel frage;
    private JTextField antwort;
    public String string;

    public UI03(){
        super("Eingabe");
        setLayout(new FlowLayout());
        frage = new JLabel();
        antwort = new JTextField();
        antwort.setPreferredSize(new Dimension(100,24));
    }

    private class eventHandler implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            UI03.this.string = antwort.getText();
            System.exit(0);

        }
    }

    public String input(String s) {
        frage.setText(s);
        add(frage);
        add(antwort);

        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);

        eventHandler handler = new eventHandler();
        antwort.addActionListener(handler);

        return string;
    }
}

以及我要在其中使用的主类

public class UIMain {
    public static void main(String[] args) {
        UI03 in = new UI03();
        String h = in.input("?");
        System.out.println(h);
    }
}

因此,如果我启动它,输出为“ null”。 窗口打开,我可以写任何东西。

如果您需要更多信息,请在评论中提问。 我感谢每个想要帮助的人。

1 个答案:

答案 0 :(得分:0)

首先:请为类名称使用CamelCase。

关于您的问题:您不要在方法“输入”中的任何位置分配“字符串”。我认为您不了解EventHandler的概念。

在创建Window时应分配一个EventHandler,而不是在运行某些方法时分配。

也可以考虑在发布此类内容之前阅读此处的指南。 (您似乎是一名学生,所以我让那一个通过。)