2010-12-28 40 views
5

Tôi tự hỏi liệu có thể giữ một tham chiếu đến đối tượng (JDialog?) Được tạo bởi một trong những phương thức tĩnh của JOptionPane (ví dụ: showMessageDialog)? Tôi định sửa đổi vị trí nơi hộp thoại xuất hiện trên màn hình. Cụ thể hơn, tôi muốn hộp thoại xuất hiện ở góc trên cùng bên trái của cửa sổ ứng dụng chính, thay vào đó là cửa sổ trung tâm theo mặc định. Vì vậy, có một tham chiếu đến đối tượng sẽ cho phép tôi sử dụng setLocation để đạt được hiệu quả mong muốn ...Bắt giữ tham chiếu đến đối tượng được tạo bởi các phương thức tĩnh JOptionPane

Bất kỳ đề xuất nào sẽ được đánh giá cao! Cảm ơn!

Trả lời

7

Phương thức tĩnh showXXXDialog() chỉ để thuận tiện. Nếu bạn xem mã nguồn cho JOptionPane, bạn sẽ thấy rằng trong thực tế, đối tượng JOptionPane được tạo dựa trên các tùy chọn bạn chỉ định và sau đó gọi là JOptionPane.createDialog(...). Một phương pháp để hiển thị hộp thoại tin nhắn của bạn ở một vị trí khác nhau là:

JOptionPane pane = new JOptionPane("Message", JOptionPane.WARNING_MESSAGE, 
     JOptionPane.DEFAULT_OPTION); 
JDialog dialog = pane.createDialog("TITLE"); 
dialog.setLocation(0, 0); 
dialog.setVisible(true); 

// dialog box shown here 

dialog.dispose(); 
Object selection = pane.getValue(); 

Với sự kết hợp của các thông số để các nhà xây dựng JOptionPaneJOptionPane phương pháp thiết lập, bạn có thể làm bất cứ điều gì bạn đã có thể thực hiện với các phương pháp tĩnh, ngoài ra bạn có quyền truy cập vào đối tượng JDialog.

EDITED: (thêm ví dụ về hộp thoại đầu vào cho OP)

JOptionPane pane = new JOptionPane("Message", JOptionPane.QUESTION_MESSAGE, 
     JOptionPane.OK_CANCEL_OPTION, null, null, null); 
pane.setWantsInput(true); 
JDialog dialog = pane.createDialog(null, "Title"); 
dialog.setLocation(0, 0); 
dialog.setVisible(true); 

String str = (String) pane.getInputValue(); 
+0

Cool, tôi có thể thấy làm thế nào tôi có thể áp dụng ở trên để showMessageDialog, showConfirmDialog, vv Nhưng những gì về thực hiện showInputDialog? Làm cách nào để triển khai trường nhập văn bản trong JDialog? – skyork

+0

@ user548240 - ví dụ được thêm vào inputDialog –

+0

Thật tuyệt, tôi đã suy nghĩ về việc xây dựng nó từ đầu và không biết có phương pháp nào có sẵn trong JOptionPane. Cảm ơn! – skyork

0

Các JOptionPane sẽ sử dụng cho parentComponent (tham số phương pháp đầu tiên) để xác định nơi để tập trung hộp thoại (ví dụ như trong javax.swing.JOptionPane.showMessageDialog (Component, Object))

Bạn có thể cố gắng để vượt qua trong một thành phần giả định vị trí hộp thoại đến một vị trí khác, ví dụ như thế này:

JFrame frame = new JFrame("Test"); 
    frame.setLocation(100, 100); 
    frame.setSize(500, 500); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

    // 'Invisible' fake component for positioning 
    JWindow c = new JWindow(); 
    c.setSize(0, 0); 
    c.setVisible(true); 
    Point location = frame.getLocation(); 
    location.translate(200, 100); 
    c.setLocation(location); 

    JOptionPane.showInputDialog(c,"Foo"); 
Các vấn đề liên quan