2010-04-12 36 views
5

tôi mở rộng JDialog để tạo ra một hộp thoại tùy chỉnh mà người dùng phải điền một số lĩnh vực: dialog http://www.freeimagehosting.net/uploads/3d4c15ed9a.jpgLấy đầu vào nhập vào một JDialog

Làm thế nào tôi nên lấy dữ liệu nhập vào?

Tôi đã đưa ra giải pháp hoạt động. Nó bắt chước JOptionPane nhưng cách tôi làm điều đó trông xấu xí với tôi bởi vì các trường tĩnh tham gia ... Đây là khoảng mã của tôi:

public class FObjectDialog extends JDialog implements ActionListener { 
    private static String name; 
    private static String text; 
    private JTextField fName; 
    private JTextArea fText; 
    private JButton bAdd; 
    private JButton bCancel; 

    private FObjectDialog(Frame parentFrame) { 
     super(parentFrame,"Add an object",true); 
     // build the whole dialog 
     buildNewObjectDialog(); 
     setVisible(true); 
    } 

    @Override 
    public void actionPerformed(ActionEvent ae) { 
     if(ae.getSource()==bAdd){ 
      name=fName.getText(); 
      text=fText.getText(); 
     } 
     else { 
      name=null; 
      text=null; 
     } 
     setVisible(false); 
     dispose(); 
    } 

    public static String[] showCreateDialog(Frame parentFrame){ 
     new FObjectDialog(parentFrame); 
     String[] res={name,text}; 
     if((name==null)||(text==null)) 
      res=null; 
     return res; 
    } 
} 

Như tôi đã nói, đó là hoạt động đúng, nhưng tôi đoán rằng có thể nâng cao nghiêm trọng vấn đề tương tranh ...

Có cách nào khác để làm điều đó không? Làm thế nào là nó được thực hiện trong JOptionPane?

+0

Bạn sử dụng giao diện nào? –

+1

@Martijn Courteaux: Nimbus (http://stackoverflow.com/questions/2616448/im-tired-of-jbuttons-how-can-i-make-a-nicer-gui-in-java) ;-) –

Trả lời

10

Nếu tôi làm điều này, tôi luôn luôn làm việc như thế này:

FObjectDialog fod = new FObjectDialog(this); 
fod.setLocationRelativeTo(this); // A model doesn't set its location automatically relative to its parent 
fod.setVisible(true); 
// Now this code doesn't continue until the dialog is closed again. 
// So the next code will be executed when it is closed and the data is filled in. 
String name = fod.getName(); 
String text = fod.getText(); 
// getName() and getText() are just two simple getters (you still have to make) for the two fields their content 
// So return textField.getText(); 

Hope this helps!
PS: Chương trình của bạn trông tuyệt vời!

+0

Ooooooooh tất nhiên ! Tôi không biết tại sao tôi bị mắc kẹt với những lĩnh vực tĩnh ... Trong tâm trí của tôi đối tượng đã bị phá hủy sau khi xử lý cửa sổ, nhưng thực sự nó không phải là. Cảm ơn ! –

1

Nếu bạn có ý định hiển thị nhiều hộp thoại cùng một lúc, thì bạn có các vấn đề tương tranh, không phải khác. Tuy nhiên, loại bỏ tất cả các công cụ tĩnh sẽ làm cho thiết kế sạch hơn, an toàn hơn và dễ dàng hơn để kiểm tra. Chỉ cần kiểm soát việc tạo và hiển thị hộp thoại từ mã gọi và bạn không cần bất kỳ nội dung tĩnh nào.

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