2011-09-20 24 views
6

Tôi đang thêm một bó JInternalFrame s vào một JDesktopPane, vì người dùng chọn để mở các tính năng khác nhau thông qua các menu. Nhưng tôi muốn các khung bên trong mở trung tâm trong ngăn máy tính để bàn, trái ngược với phía trên bên trái, nơi chúng dường như mặc định.Làm cách nào để mở một JInternalFrame tập trung vào một JDesktopPane?

Làm cách nào tôi có thể chỉ định rằng JInternalFrames mở trung tâm hoặc di chuyển chúng đến trung tâm sau khi mở?

jDesktopPane.add(jInternalFrame); // jInternalFrame is not centered! 
+1

Bạn sẽ nhận được với và chiều cao của màn hình, và làm cho một số toán học để thiết lập X và Y cho JInternalFrame. Tôi đã không làm điều đó trong nhiều năm, vì vậy tôi không thể cung cấp cho bạn các phương pháp hoàn chỉnh. Xin lỗi – santiagobasulto

Trả lời

11

để tham khảo, đây là giải pháp tôi sử dụng, dựa trên lời khuyên dogbane của:

Dimension desktopSize = desktopPane.getSize(); 
Dimension jInternalFrameSize = jInternalFrame.getSize(); 
jInternalFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2, 
    (desktopSize.height- jInternalFrameSize.height)/2); 
4

làm việc ra góc trên cùng bên trái của vị trí mới (dựa trên kích thước của JDesktopPaneJInternalFrame) và sau đó gọi JInternalFrame.setLocation.

0

Tôi sẽ đề xuất phương pháp Window.setLocationRelativeTo (Thành phần), sẽ căn giữa cửa sổ liên quan đến thành phần được chỉ định. Thay vì đi qua trong một JDesktopPane, bạn có thể muốn để có được những khung hình cha mẹ cho một thành phần, vì nếu không, JInternalFrame của bạn sẽ được tập trung theo bất cứ thành phần bạn vượt qua trong

Đây là một mẫu mã:.

private void showDialog(Dialog dialogToCenter, Component button) { 
    Frame frame = JOptionPane.getFrameForComponent(button); 
    dialogToCenter.setLocationRelativeTo(frame); 
    dialogToCenter.setVisible(true); 
} 
+2

Tôi tin setLocationRelativeTo chỉ khả dụng cho Windows chứ không phải JInternalFrames (không kế thừa từ Cửa sổ). Có lẽ tôi đang thiếu một cái gì đó, nhưng bạn có thể sử dụng phương pháp này với một JInternalFrame thay vì một JDialog? – Steven

+0

Xin lỗi, bạn đã đúng, tôi nhầm tưởng rằng JInternalFrame được mở rộng từ Cửa sổ. – piepera

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