Java-如何扩展InputStream以从JTextField读取?

Ang*_*ris 4 java swing inputstream jtextfield

在一个项目上工作,我通过类似控制台的小窗口运行java应用程序.感谢这里的精彩社区,我设法通过输出来自proccess的数据解决问题但是我的命令行应用程序运行将不断给出错误,因为没有输入流.

基于该线程中的最后一个有用的回复,我想我将采用类似的方法JTextFieldInputStream extends InputStream实现,但是在javadocs以及整个google和互联网上寻找一些类,我真的没有解释如何做到这一点.

所以我要求一些链接,示例,教程,示例代码,就像上一个主题一样.给我一个扩展InputStream的类,当我按Enter键时可以扩展为从JTextField读取,我将完成其余的工作并使其工作!提前致谢!

Gui*_*let 9

我不明白为什么你需要一个扩展InputStream的JTextField?基本上,你要找的是:

  1. 添加ActionListenerJTextField(即,当使用印刷机Enter,actionPerformed将被调用)
  2. 您需要text使用JTextFieldgetText()
  3. 然后,您可以将"转换" String textInputStreamwithnew ByteArrayInputStream(text.getBytes("UTF-8"));

这是一个小片段,应该为您提供基本的想法:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class TestTextField {

    private void initUI() {
        JFrame frame = new JFrame(TestTextField.class.getSimpleName());
        frame.setLayout(new FlowLayout());
        final JTextField textfield = new JTextField(20);
        textfield.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    String text = textfield.getText();
                    InputStream is = new ByteArrayInputStream(text.getBytes("UTF-8"));
                    // Here do something with your input stream (something non-blocking)
                    System.err.println(text);
                } catch (UnsupportedEncodingException e1) {
                    e1.printStackTrace();
                }

            }
        });
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(textfield);
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestTextField().initUI();
            }
        });
    }

}
Run Code Online (Sandbox Code Playgroud)