Java 在Eclipse中解析来自GUI而不是控制台的输入

Java 在Eclipse中解析来自GUI而不是控制台的输入,java,eclipse,user-interface,Java,Eclipse,User Interface,我有一个带有文本框和提交按钮的小型GUI项目。我想做的是让用户在文本框中输入,并提交一个输入,让他们在程序中移动(例如,1进入下一个菜单)。该程序过去没有GUI,而是使用控制台输入输入(如第一段代码所示),因此我想将该程序从控制台移开 现在我的主要观点是: public static void main(String[] args) { //Initialize menu variable Menu menu = MainMenu.getInstance();

我有一个带有文本框和提交按钮的小型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而不是控制台处理用户输入

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

    //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); 
}

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

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

    //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); 
}
我可能还遗漏了其他一些小方面,但这是最重要的部分