【问题标题】:Parse Input from GUI instead of Console in Eclipse在 Eclipse 中从 GUI 而非控制台解析输入
【发布时间】:2016-09-12 00:14:47
【问题描述】:

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

【问题讨论】:

    标签: java eclipse user-interface


    【解决方案1】:

    我能够弄清楚我自己的问题。我实现了:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多