2010-04-01 13 views
6

Tôi đang sử dụng Swing GroupLayout và tôi bị nhầm lẫn về các giá trị GroupLayout.DEFAULT_SIZEGroupLayout.PREFERRED_SIZE. Tôi không bao giờ biết khi nào nên sử dụng mỗi người trong số họ theo các phương pháp như GroupLayout.addComponent(Component, int, int, int).sự khác nhau giữa DEFAULT_SIZE và PREFERRED_SIZE là gì?

giả sử tôi có mã này:

GroupLayout l = ...; 

l.setHorizontalGroup(l.createSequentialGroup() 
    .addComponent(tf1) 
    .addComponent(tf2)); 

l.setVerticalGroup(l.createParallelGroup() 
    .addComponent(tf1) 
    .addComponent(tf2)); 

có hai JTextField s trên một dòng duy nhất đặt ra với GroupLayout (một nhóm tuần tự theo chiều ngang và một nhóm song song theo chiều dọc). nếu tôi thay đổi kích thước cửa sổ ngay bây giờ, cả hai thành phần sẽ nhận được không gian có sẵn (50% mỗi phần). nhưng tôi chỉ muốn trường văn bản đầu tiên tăng/thu nhỏ theo chiều ngang và chỉ trường văn bản thứ hai để tăng/thu nhỏ theo chiều dọc. giá trị nào của phút, preftối đa tôi nên sử dụng để thực hiện điều đó? Tôi biết tôi chỉ có thể thử nó và xem những gì kết hợp hoạt động nhưng tôi muốn biết lý do đằng sau vấn đề này.

+0

Về cơ bản GroupLayout được thiết kế để sử dụng trong trình soạn thảo giao diện người dùng WYSIWYG (như trong Netbeans). Bạn có yêu cầu sự tò mò hoặc bạn sử dụng nó "bằng tay" không? – pajton

+1

cả hai :-) Tôi sử dụng trình soạn thảo WYSIWYG từ NetBeans nhưng tôi muốn hiểu mã để tôi có thể thực hiện một số trường hợp đơn giản 'bằng tay'. Tôi có nhiều quyền kiểm soát mã hơn khi tự làm. – cd1

Trả lời

3

Một số hướng dẫn có thể được tìm thấy trong How to Use GroupLayout: Component Size and Resizability. Về DEFAULT_SIZEPREFERRED_SIZE,

Chúng có thể được sử dụng như là các tham số trong phương pháp

addComponent(Component comp, int min, int pref, int max) 

Để buộc một thành phần được thay đổi kích thước (cho phép thu hẹp và phát triển):

group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 

Điều này cho phép thành phần thay đổi kích thước giữa kích thước bằng không (tối thiểu) thành bất kỳ kích thước nào (Short.MAX_VALUE vì kích thước tối đa có nghĩa là "vô hạn"). Nếu chúng ta muốn thành phần không co lại dưới kích thước tối thiểu mặc định của chúng ta, chúng ta sẽ sử dụng GroupLayout.DEFAULT_SIZE thay vì 0 trong tham số thứ hai.

Để thực hiện một kích thước cố định thành phần (ngăn chặn thay đổi kích thước):

group.addComponent(component, GroupLayout.PREFERRED_SIZE, 
    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)... 

Điều thú vị là giá trị không đổi là tiêu cực, vì vậy họ không thể bị nhầm lẫn với những hạn chế thực tế.

1

Tôi cũng đã nhầm lẫn về cách GroupLayout.DEFAULT_SIZEGroupLayout.PREFERRED_SIZE được sử dụng trong GroupLayout.SequentialGroup.addComponent(Component c, int min, int pref, int max), ngay cả sau khi tham khảo phần GroupLayout của Hướng dẫn Java và một bài báo có tựa đề java.net Getting to know GroupLayout, part 1.

Lặn vào JDK 1.6.0_27 GroupLayout.javasource Tôi đã tìm thấy câu trả lời trong lớp ComponentSpring. Từ đó tôi đã có thể làm việc ra các quy tắc:

Nếu kích thước tối thiểu là cần thiết:

  1. và cung cấp min giá trị không âm, giá trị được trả về.
  2. nếu khác là PREFERRED_SIZE, chúng tôi tuân thủ các quy tắc về kích thước được ưu tiên.
  3. khác kích thước tối thiểu của thành phần được trả lại.

Nếu một kích thước ưa thích là cần thiết:

  1. và cung cấp pref giá trị không âm, giá trị được trả về.
  2. nếu khác là DEFAULT_SIZE hoặc PREFERRED_SIZE, trả về kích thước ưa thích của thành phần.

Nếu kích thước tối đa là cần thiết:

  1. và cung cấp max giá trị không âm, giá trị được trả về.
  2. nếu khác là PREFERRED_SIZE, chúng tôi tuân thủ các quy tắc về kích thước được ưu tiên.
  3. khác tối đa hóa thành phần được trả lại.

Như thùng rác đã lưu ý, định nghĩa là số âm. Bất kỳ giá trị âm nào khác cho min, pref và max bên cạnh DEFAULT_SIZE hoặc PREFERRED_SIZE là lỗi và xác nhận lần truy cập.

Sự tương tác giữa các kích thước tối thiểu SequentialGroup.addComponent phút, pref và tối đa không rõ ràng với tôi từ hướng dẫn. Bây giờ tôi biết tại sao PREFERRED_SIZE,DEFAULT_SIZE,PREFERRED_SIZE là cố định, tại sao nó không quan trọng nếu đối số ở giữa là DEFAULT_SIZE hoặc PREFERRED_SIZE và cách NetBeans tạo ra các giá trị kích thước cố định như công việc DEFAULT_SIZE,300,Short.MAX_VALUE.