2009-11-04 34 views

Trả lời

27

Oh..it của khá đơn giản:

Giả sử bạn có một JFrame có chứa một JDialog, và bạn muốn JDialog (khi mở) là ngay trên đầu trang của JFrame.

Vì vậy, trong JDialog constructor, bạn nên có một cái gì đó như:

public class MyDialog extends JDialog 
public MyDialog(JFrame parent) 
{ 
    super.setLocationRelativeTo(parent); // this will do the job 
} 

Nói cách khác, vượt qua JFrame con trỏ tới hộp thoại của bạn, và gọi setLocationRelativeTo (...); phương pháp.

+0

Tôi đã không nhận ra phương thức đó đã tồn tại; khá tiện dụng! – rob

+6

Wow, điều này thực sự đã giúp tôi! Chi tiết nhỏ mặc dù ... nó sẽ được gọi chỉ sau khi thiết lập kích thước hộp thoại của bạn, hoặc hộp thoại sẽ xuất hiện với góc trên bên trái của nó tập trung vào cửa sổ cha mẹ. – Nyerguds

3

Bạn đang nói về loại hộp thoại bật lên nào? Nếu bạn đang sử dụng một JOptionPane hoặc một cái gì đó tương tự, thiết lập thành phần cha của nó để JFrame và nó sẽ tự động trung tâm trên đầu trang của cửa sổ JFrame.

JOptionPane.showMessageDialog(frame, "Hello, World!"); 

Nếu bạn đang tạo JDialog riêng bạn, bạn có thể nhận được vị trí của JFrame sử dụng JFrame.getLocation() và kích thước của nó sử dụng JFrame.getSize(). Toán học khá đơn giản từ đó; chỉ cần tính trung tâm của JFrame và trừ một nửa chiều rộng/chiều cao của JDialog để có góc trên bên trái của hộp thoại của bạn.

Nếu JDialog của bạn chưa được hiển thị, JFrame.getSize() có thể cung cấp cho bạn kích thước bằng không. Trong trường hợp đó, bạn có thể sử dụng JDialog.getPreferredSize() để tìm hiểu xem nó sẽ lớn đến mức nào khi nó được hiển thị trên màn hình.

4

Tôi thường gọi phương thức sau đây:

dialog.setLocationRelativeTo(parent); 

Link to Javadocs

0

Nếu bạn muốn có một phương thức và tập trung thoại trên một cửa sổ ...

Trong constructor của hộp thoại:

class CustomDialog extends JDialog { 
    public CustomDialog(Frame owner, String title, boolean modal) { 
     super(owner, title, modal); 
     setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); 

     ... 

     setSize(150, 100); 
     setLocationRelativeTo(owner); 
    } 
} 

Để hiển thị hộp thoại (sử dụng nút, v.v.):

public void actionPerformed(ActionEvent e) { 
    dialog.setVisible(true); 
} 
Các vấn đề liên quan