FormData và FormAttachment 1. FormData Object Fields Đối tượng FormData chỉ rõ mỗi widget ở trong FormLayout sẽ được trình bày như thế nào. Mỗi đối tượng FormData định nghĩa sự gắn kết bốn cạnh của mỗi widget. Sự gắn kết muốn nói tới vị trí các cạnh của mỗi widget. Để thiết lập đối tượng FormData, bạn sử dụng phương thức setLayoutData, ví dụ: Button B1 = new Button (shell, SWT.PUSH); B1.setText(“B1”); B1.setLayoutData(new FormData()); Trong trường hợp này sự gắn kết mặc định được định nghĩa, điều này làm mất đi toàn bộ mục đích và tính hữu dụng của FormLayout. Sự gắn kết mặc định đính (attach) một widget vào vị trí cạnh trên (top) và cạnh trái (left) của parent Composite. Nếu tất cả widget trong FormLayout sử dụng sự gắn kết mặc định thì chúng sẽ nằm chồng lên nhau ở góc phía trên bên trái của parent Composite. Điều đó tôi chưa thấy nó dùng trong trường hợp nào là hiệu quả, và tôi khuyên bạn không nên dùng cách này, nó không có ý nghĩa gì cả! Các trường left, right, top và bottom của FormData theo thứ tự lần lượt chỉ định rõ các đối tượng FormAttachment được kết hợp với cạnh trái, phải ,trên và dưới của mỗi widget. Ví dụ: Code 6 FormData FormLayout formLayout = new FormLayout(); shell.setLayout(formLayout);
Button b1 = new Button(shell,SWT.PUSH); b1.setText("ITS"); FormData formData = new FormData(); formData.top = new FormAttachment(0,20); formData.bottom = new FormAttachment(100,-5); formData.left = new FormAttachment(20,0); formData.right = new FormAttachment(100,-3); b1.setLayoutData(formData); Nếu bạn thấy tò mò với các tham số trong đối tượng FormAttachment thì cứ chỉnh sửa xem sao. Và tôi nghĩ làm vậy thì trước khi xem tiếp phần trình bày về FormAttachment dưới đây thì bạn cũng đã biết được đôi điều về nó. Các trường width và height của FormData chỉ rõ yêu cầu về kích thước của chiều rộng và chiều cao của widget. Nếu như chiều rộng hoặc chiều cao được chỉ rõ xảy ra xung đột do sự ép buộc bởi sự gắn kết, thì chiều rộng hoặc chiều cao sẽ mất đi hiệu lực của nó. Nhưng trong một số trường hợp mà bạn không muốn định nghĩa sự gắn kết cho tất cả các cạnh của widget thì sự thiết lập được định đoạt bởi chiều cao và chiều rộng. Điều này phụ thuộc vào sự thiết kế giao diện của bạn. Sau đây là các ví dụ mà có thể chiều cao hoặc chiều rộng mất đi hiệu lực của nó khi thay đổi kích thước của shell. Chiều cao vẫn đạt được hiệu lực như mong muốn: FormData formData = new FormData(); formData.height = 100; formData.top = new FormAttachment(0,5); /*formData.bottom = new FormAttachment(100,-5); Làm mất đi hiệu lực của height trong trường hợp này*/ formData.left = new FormAttachment(0,5); formData.right = new FormAttachment(100,-5); b1.setLayoutData(formData); Chiều rộng vẫn đạt được hiệu lực như mong muốn: FormData formData = new FormData(); formData.width = 50; formData.top = new FormAttachment(0,5); formData.bottom = new FormAttachment(100,-5); formData.left = new FormAttachment(0,5); /*formData.right = new FormAttachment(100,-5); Làm mất đi hiệu lực của width trong trường hợp này*/ b1.setLayoutData(formData); 2. FormAttachment Objects Các phương thức khởi tạo của FormAttachment: FormAttachment(Control control) FormAttachment(Control control, int offset) (*) FormAttachment(Control control, int offset, int alignment) FormAttachment(int numerator, int offset) (*) FormAttachment(int numerator, int denominator, int offset) * : thường được sử dụng, trong đó: control: chỉ định widget được lấy làm mốc; offset: chỉ định khoảng trống được tính theo các pixels; numerator: chỉ ra độ co giãn tương đối theo một tỉ lệ với denominator. Code7 FormAttachment FormLayout formLayout = new FormLayout(); shell.setLayout(formLayout);
Button b1 = new Button(shell,SWT.PUSH); b1.setText("ITS"); Button b2 = new Button(shell,SWT.PUSH); b2.setText("Love JavaVietnam.org"); Button b3 = new Button(shell,SWT.PUSH); b3.setText("Learning and Sharing");
FormData formData = new FormData(); formData.width = 50; formData.top = new FormAttachment(0,15); formData.bottom = new FormAttachment(100,-15); formData.left = new FormAttachment(0,15); b1.setLayoutData(formData);
FormData formData1 = new FormData(); formData1.height = 50; formData1.left = new FormAttachment(b1,25); formData1.top = new FormAttachment(0,15); formData1.right = new FormAttachment(100,-20); b2.setLayoutData(formData1);
FormData formData2 = new FormData(); formData2.left = new FormAttachment(b1,15); formData2.top = new FormAttachment(b2,20); formData2.right = new FormAttachment(100,-15); formData2.bottom = new FormAttachment(100,-25); b3.setLayoutData(formData2); FormAttachment là một đối tượng định nghĩa sự gắn kết riêng biệt các cạnh của widget. Nó không cần phải thiết lập sự gắn kết cho tất cả bốn cạnh của widget. Việc giải thích ý nghĩa của các trường của FormAttachment được minh họa theo hình vẽ dưới đây, là kết quả cài đặt của code 7.  Toàn bộ bài viết về Layouts trong SWT được tổng hợp lại. Gồm có FillLayout, RowLayout, GridLayout và FormLayout (đây là những trình bố cục cơ bản,còn những trình bố cục khác như StackLayout hay BorderLayout... mình không trình bày ở đây, vì mình hầu như không dùng đến, dùng các Layouts cơ bản là cũng đủ rồi.À mà null layout thì chắc là khỏi phải nói nhỉ). Để edit bài viết trực tiếp lên đây mình gặp một số khó khăn trong việc trình bày (format) nên các bạn có thể down file "LayoutsInSWT.rar", giải nén sẽ có được file "LayoutsInSWT.pfd". Rất mong nhận được ý kiến đóng góp của các bạn. Minh họa : LayoutsInSWT.rar (http://www.javavietnam.org/javavn/mvnforum/getattachment?attach=1370)
Tác giả : ITS JavaVietnam.org
|