2011-08-29 26 views
6

Tôi đang chuyển đổi ứng dụng bảng điều khiển sang ứng dụng sử dụng Swing. Tại thời điểm này tôi muốn chương trình của tôi thực hiện một điều tương tự với số .nextInt(); này làm cách nào để tôi có thể đạt được điều này bằng cách sử dụng .getText(); hoặc một cái gì đó tương tự?Cách đợi đầu vào trong trường văn bản?

Tóm lại;

Làm cách nào tôi có thể thực hiện chương trình cho đến khi người dùng nhập nội dung nào đó vào trường văn bản và nhấn enter.

+0

vẫn không hiểu câu hỏi - ý bạn là gì khi "giữ thực thi"? Ngoài ra: đọc một hướng dẫn Swing cơ bản và tài liệu api của textfield (gợi ý: setAction có thể đáng xem :-) – kleopatra

Trả lời

5

Cập nhật: Vì vậy, bạn muốn đợi người dùng nhập nội dung nào đó từ GUI. Điều này là có thể nhưng cần phải được đồng bộ vì GUI chạy trong một chuỗi khác.

Vì vậy, các bước như sau:

  1. Tạo một "chủ sở hữu" đối tượng mà deligates kết quả từ GUI để "logic" chủ đề
  2. Các "logic" chủ đề chờ đợi cho đầu vào (sử dụng holder.wait())
  3. Khi người dùng nhập văn bản, nó đồng bộ hóa đối tượng "chủ" và cho kết quả + thông báo chuỗi "logic" (với holder.notify())
  4. Luồng "logic" được giải phóng khỏi khóa và tiếp tục.

Full dụ:

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

Kiểm tra câu hỏi cập nhật. – Derek

+0

@Deza: Đã cập nhật với ví dụ đầy đủ .. – dacwe

+1

Gần 6 năm sau- cảm ơn bạn !! Ví dụ tuyệt vời. – DCON

0

ứng dụng Console và ứng dụng giao diện đồ họa là khá khác nhau trong hành vi. Ứng dụng Console nhận đầu vào từ các đối số dòng lệnh hoặc đợi người dùng nhập vào từ bàn phím trong khi ứng dụng GUI được điều khiển bởi cơ chế sự kiện để thực hiện một tác vụ.

Ví dụ: bạn thêm đối tượng TextField vào Khung của bạn và thêm một keyListener vào đối tượng trường văn bản của bạn. Trình lắng nghe được gọi khi sự kiện quan trọng được thông báo. Có rất nhiều ví dụ ngoài kia, ví dụ: ví dụ java chính thức http://download.oracle.com/javase/tutorial/uiswing/events/keylistener.html

Các vấn đề liên quan