在Eclipse中从GUI而不是Console中解析输入

时间:2016-09-12 00:14:48

标签: java eclipse user-interface

我有一个带有文本框和提交按钮的小型GUI项目。我想要做的是让用户输入文本框并提交一个输入来移动它们通过程序(例如1进入下一个菜单)。该程序没有使用GUI和使用控制台输入输入(如第一个代码中所示),所以我想将程序从控制台移开。

现在我的主要是:

    public static void main(String[] args)  {
    //Initialize menu variable
    Menu menu = MainMenu.getInstance();

    new Console();
    while (true){
        //Display current menu
        menu.displayMenu();
        while (menu.moreInputNeeded()){
            menu.displayPrompt();
            try {
                // Process user input.
                menu.parseInput(new BufferedReader(new InputStreamReader(System.in)).readLine());
            } catch (IOException e) {
                // printStackTrace(); 
                System.out.println(Prompt.INVALID_INPUT);
            }
        }

        menu = menu.getNextMenu();
    }
}        

我使用文本/提交按钮,如下所示:

        //Create the Text Box
    JTextField textField = new JTextField(20);

    //Submit Button
    JButton submit = new JButton("Submit");


    //Submit Function
    submit.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            menuinput = textField.getText();
            textField.setText("");

            //
            System.out.println(menuinput);

        }
    });

那么可以从GUI而不是控制台处理用户输入吗?

1 个答案:

答案 0 :(得分:0)

我能够找出自己的问题。我实施了:

    //Variables
JTextField tfIn;
JLabel lblOut;
private final PipedInputStream inPipe = new PipedInputStream();
private final PipedInputStream outPipe = new PipedInputStream();
PrintWriter inWriter;

String input = null;
Scanner inputReader = new Scanner(System.in);
//Variables

    System.setIn(inPipe); 
    try {
        System.setOut(new PrintStream(new PipedOutputStream(outPipe), true)); 
        inWriter = new PrintWriter(new PipedOutputStream(inPipe), true); 
    }
    catch(IOException e) {
        System.out.println("Error: " + e);
        return;
    }
    tfIn = new JTextField();
    tfIn.addActionListener(this);
    frame.add(tfIn, BorderLayout.SOUTH);

使用方法:

    public synchronized void actionPerformed(ActionEvent evt)
{
    textArea.setText("");
    String text = tfIn.getText();
    tfIn.setText("");
    inWriter.println(text); 
}

我可能还有其他一些小方面,但这是最重要的部分。