2011-08-09 48 views
11
setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH); 
setResizable(false); 
setUndecorated(true); 
System.out.println("--------> "+getContentPane().getWidth()); //----> 0 why is this happening? 

Tôi đang cố gắng xác định kích thước của JFrame. Tôi đã tìm kiếm trên google và kiểm tra các tài liệu và tôi vẫn không biết tại sao nó sẽ không hoạt động Nó hoạt động tốt trên về bất kỳ điều khiển khác tôi thử nó trênJava, JFrame: getWidth() trả về 0

EDIT: frame.getWidth() hoạt động khi gọi là bên ngoài của lớp (kéo dài JFrame) vẫn còn, nếu tôi thay

System.out.println("--------> "+getContentPane().getWidth()); 

với

System.out.println("--------> "+this.getWidth()); 

getWidth sẽ vẫn trở về 0

EDIT2: Tôi cần kích thước của khung hình trước khi thiết lập hiển thị và nội dung. Tôi cần thêm các điều khiển khác vào khung và các tọa độ và kích thước của chúng phụ thuộc vào kích thước của khung hình.

+2

Khung có hiển thị không? – lhballoti

+0

mọi thứ phụ thuộc vào cách bạn đặt vùng chứa, nếu có định nghĩa cho 'setSize()' hoặc 'setBounds()', thì bất kỳ reall 'Dimension' chỉ trả về' Container', nếu không '' '' '' '' '' '' 'Container', sau đó bạn có thể nhận được 'Kích thước' này bất cứ nơi nào bạn muốn – mKorbel

+0

@ madflame991, Để chỉnh sửa thứ hai của bạn, điều này là không thể, cũng không có ý nghĩa. – mre

Trả lời

10

Lý do bạn nhận được 0 là vì bạn không gọi bất kỳ gói nào(), setSize (int, int) hoặc setSize (Tham số). Đây chỉ là khi gọi một trong những phương pháp này mà bố trí khung của bạn sẽ được tính toán.

JFrame frame = new JFrame("My Frame"); 
frame.setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH); 
frame.setResizable(false); 
frame.setUndecorated(true); 
frame.pack(); // Important line!!! 
frame.setVisible(true); 
System.out.println("--------> "+getContentPane().getWidth()); 
+0

Tôi cần chiều rộng trước khi tôi hoàn thành việc thêm điều khiển – adrianton3

+1

Tôi chạy thử nghiệm và có vẻ như bạn không thể có được chiều rộng khung là nó không hiển thị nhưng tôi nhận ra rằng nếu khung của bạn luôn là JFrame.MAXIMIZED_BOTH, thì chiều rộng khung bằng với chiều rộng màn hình mà bạn có thể lấy bằng 'Toolkit tk = Toolkit.getDefaultToolkit(); int screenWidth = tk.getScreenSize(). width;' – aymeric

+0

Cảm ơn bạn! getScreenSize không phải là những gì tôi đang tìm kiếm nhưng nó giải quyết được khá nhiều vấn đề của tôi – adrianton3

10

Bạn chưa đã nhận ra (ví dụ: setVisible(true)) số JFrame. Và do đó, nó không có kích thước vì nó đã không đặt ra các thành phần của nó.

+2

1+. 'pack()' cũng sẽ hiển thị JFrame (tôi tin). –

+0

Tôi đã thử gọi nó sau khi hiển thị và nó vẫn trả về 0 – adrianton3

+0

@ madflame991, Đây có thể là một câu hỏi ngu ngốc, nhưng bạn đã thêm bất kỳ thành phần nào vào 'JFrame' trước khi hiển thị? Và như @Hovercraft đã đề cập, có lẽ việc gọi 'pack()' là tùy chọn tốt hơn, vì điều này sẽ buộc container chứa bố cục các thành phần của nó và sau đó tự hiển thị. – mre