2009-08-18 31 views
7

Đầu tiên mô tả vấn đề: Trong quá trình bố trí lại do thay đổi về chiều rộng hoặc chiều cao, ScrollPaneLayout của Java yêu cầu ưu tiênSize con của nó TRƯỚC KHI thiết lập giới hạn của chế độ xem đó. Trên Text-Components gọi getPreferredSpan có thể thay đổi cách bố trí kể từ khi getPreferredSpan gọi setSize nội bộ. Hiệu ứng là, không có khung nhìn nào (mở rộng javax.swing.text.View) có thể chắc chắn lấy ra kích thước thực của thành phần cha của nó trong tình huống này. Một getVisibleRect sẽ thất bại trong trường hợp này vì các giới hạn của khung nhìn chưa được thiết lập. Kiểm tra tính hợp lệ của thành phần văn bản để chặn quá trình bố trí không phải là một tùy chọn vì nó đã được valiid trong trường hợp này.Làm thế nào để có được một rect có thể nhìn thấy chính xác trong một validateTree?

Vì vậy, câu hỏi đặt ra là: có khả năng để tìm hiểu xem liệu các giới hạn của JComponent có được cập nhật không?

+0

không. ý tưởng ....: P – Epaga

+0

Xin lỗi, không có ý tưởng. đã thêm thẻ "swing" ... – MartinStettner

+0

Câu hỏi này rất khó hiểu. bạn sẽ xóa nó cho chúng tôi? – marionmaiden

Trả lời

1

Có thể bạn có thể phân lớp ScrollPanel và đặt thuộc tính tùy chỉnh như "com.mycompany.BoundsSet" thành false khi bị vô hiệu và đặt đúng khi giới hạn được đặt. Sau đó, khung nhìn có thể kiểm tra thuộc tính này và nếu nó sai, hãy xác thực lại ScrollPanel và trả về kích thước được biết cuối cùng. Hy vọng sau đó, ScrollPane sẽ tiến hành và thiết lập giới hạn của nó, sau đó sự kiện revalidate sẽ đi xuống đường ống, và cờ sẽ bị xóa, cho phép bạn tin tưởng getBounds(). Hay đại loại thế.

0

Bạn không thể đơn giản sử dụng phương pháp Component#isValid. Nếu phương thức trả về true thì nó có nghĩa là thành phần được định cỡ đúng và được định vị trong parentcontainer của nó và tất cả các thành phần của nó cũng hợp lệ.

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