如何在文本字段中等待输入?

时间:2011-08-29 12:03:16

标签: java applet

我正在将控制台应用程序转换为使用Swing的应用程序。目前,我希望我的程序能够对此.nextInt();执行类似的操作,如何使用.getText();或类似内容实现此目的?

简而言之;

如果用户在文本字段中输入内容并按下回车键,我该如何执行程序。

2 个答案:

答案 0 :(得分:5)

更新:所以你想等待用户从GUI输入内容。这是可能的,但需要同步,因为GUI在另一个线程中运行。

所以步骤是:

  1. 创建一个“holder”对象,将GUI的结果分配给“logic”线程
  2. “逻辑”线程等待输入(使用holder.wait()
  3. 当用户输入文本时,它会同步“holder”对象并给出结果+通知“逻辑”线程(使用holder.notify()
  4. “逻辑”线程从其锁定中释放并继续。

  5. 完整示例:

    public static void main(String... args) throws Exception {
        final List<Integer> holder = new LinkedList<Integer>();
    
        final JFrame frame = new JFrame("Test");
    
        final JTextField field = new JTextField("Enter some int + press enter");
        frame.add(field);
        field.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                synchronized (holder) {
                    holder.add(Integer.parseInt(field.getText()));
                    holder.notify();
                }
                frame.dispose();
            }
        });
    
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    
        // "logic" thread 
        synchronized (holder) {
    
            // wait for input from field
            while (holder.isEmpty())
                holder.wait();
    
            int nextInt = holder.remove(0);
            System.out.println(nextInt);
            //....
        }
    }
    

答案 1 :(得分:0)

控制台应用程序和GUI应用程序的行为完全不同。控制台应用程序从命令行参数获取输入或等待用户从键盘输入的输入,而GUI应用程序由事件机制驱动以执行任务。

例如,您将TextField对象添加到Frame并将keyListener添加到文本字段对象。当密钥事件已通知时,将调用侦听器。那里有很多例子,例如官方java示例http://download.oracle.com/javase/tutorial/uiswing/events/keylistener.html