Sự khác biệt chính giữa setSize()
và setPreferredSize()
. Đôi khi tôi đã sử dụng setSize()
, đôi khi setPreferredSize()
, đôi khi một người làm những gì tôi muốn, đôi khi cái khác.
Tôi nên sử dụng cuộc gọi nào cho JFrame
s và JPanel
s?
Sự khác biệt chính giữa setSize()
và setPreferredSize()
. Đôi khi tôi đã sử dụng setSize()
, đôi khi setPreferredSize()
, đôi khi một người làm những gì tôi muốn, đôi khi cái khác.
Tôi nên sử dụng cuộc gọi nào cho JFrame
s và JPanel
s?
Câu trả lời:
Việc sử dụng phụ thuộc vào việc thành phần gốc có trình quản lý bố cục hay không.
setSize()
- sử dụng khi trình quản lý bố trí mẹ không tồn tại;setPreferredSize()
(cũng có liên quan setMinimumSize
và setMaximumSize
) - sử dụng khi trình quản lý bố cục mẹ tồn tại.Các setSize()
phương pháp có thể sẽ không làm bất cứ điều gì nếu cha mẹ của thành phần được sử dụng một người quản lý bố trí; những nơi mà điều này thường có ảnh hưởng sẽ là ( JFrame
các và JWindow
) thành phần cấp cao nhất và những thứ nằm bên trong các ngăn được cuộn. Bạn cũng phải gọi setSize()
nếu bạn có các thành phần bên trong cha mẹ mà không có trình quản lý bố cục.
Nói chung, setPreferredSize()
sẽ bố trí các thành phần như mong đợi nếu có trình quản lý bố trí; hầu hết các trình quản lý bố cục làm việc bằng cách lấy kích thước ưu tiên (cũng như tối thiểu và tối đa) của các thành phần của chúng, sau đó sử dụng setSize()
và setLocation()
định vị các thành phần đó theo quy tắc của bố cục.
Ví dụ: a BorderLayout
cố gắng làm cho các giới hạn của vùng "phía bắc" của nó bằng với kích thước ưu tiên của thành phần phía bắc của nó --- chúng có thể lớn hơn hoặc nhỏ hơn thế, tùy thuộc vào kích thước của JFrame
, kích thước của các thành phần khác trong bố cục, v.v.
setSize()
hoặc setBounds()
có thể được sử dụng khi không sử dụng trình quản lý bố cục.
Tuy nhiên, nếu bạn đang sử dụng trình quản lý bố trí, bạn có thể cung cấp gợi ý cho trình quản lý bố trí bằng cách sử dụng các setXXXSize()
phương pháp như setPreferredSize()
và setMinimumSize()
v.v.
Và hãy chắc chắn rằng vùng chứa của thành phần sử dụng trình quản lý bố cục tôn trọng kích thước được yêu cầu. Các FlowLayout
, GridBagLayout
và SpringLayout
các trình quản lý sử dụng kích thước ưa thích của thành phần (hai kích thước sau tùy thuộc vào các ràng buộc bạn đặt), nhưng BorderLayout
và GridLayout
thường thì không. Nếu bạn chỉ định gợi ý kích thước mới cho một thành phần đã hiển thị, bạn cần gọi phương thức xác thực lại trên nó để đảm bảo rằng hệ thống phân cấp ngăn chặn của nó được bố trí lại. Sau đó gọi phương thức sơn lại.
setSize
sẽ thay đổi kích thước thành phần thành kích thước được chỉ định.
setPreferredSize
đặt kích thước ưa thích. Thành phần có thể không thực sự có kích thước này tùy thuộc vào kích thước của vùng chứa mà nó nằm trong đó hoặc nếu người dùng định kích thước lại thành phần theo cách thủ công.
IIRC ...
setSize
đặt kích thước của thành phần.
setPreferredSize
đặt kích thước ưa thích. Layoutmanager sẽ cố gắng sắp xếp nhiều không gian đó cho thành phần của bạn.
Nó phụ thuộc vào việc bạn có đang sử dụng trình quản lý bố cục hay không ...