2009-01-12 46 views
5

Nếu tôi có trường văn bản bằng SWT, làm cách nào để có trường điền vào 100% hoặc một số chiều rộng được chỉ định.Làm thế nào để các trường văn bản lấp đầy 100% theo chiều ngang

Ví dụ: trường văn bản này sẽ chỉ tiếp cận được theo chiều ngang.

public class Tmp { 
    public static void main (String [] args) { 
     Display display = new Display(); 
     Shell shell = new Shell (display); 
     GridLayout gridLayout = new GridLayout(); 
     shell.setLayout (gridLayout); 

     Button button0 = new Button(shell, SWT.PUSH); 
     button0.setText ("button0"); 

     Text text = new Text(shell, SWT.BORDER | SWT.FILL); 
     text.setText ("Text Field"); 

     shell.setSize(500, 400); 
     //shell.pack(); 
     shell.open(); 

     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 
} 

Trả lời

4

Làm một cái gì đó như thế này:

Text text = new Text(shell, SWT.BORDER); 
text.setText ("Text Field"); 
text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER)); 

/: Vì đây là câu trả lời chấp nhận tôi loại bỏ các sai sót. Thx đã sửa tôi.

+0

Constructor GridData (int) không được chấp nhận. Sử dụng "GridData mới (SWT.FILL, SWT.CENTER)" thay vì – qualidafial

+0

Bạn không nên sử dụng lại các đối tượng GridData vì chúng hoạt động như bộ đệm để tính toán ô lưới. Tái sử dụng GridData có thể dẫn đến lỗi bố cục nơi một số thành phần chia sẻ một GridData chung được cắt ngắn thành kích thước của kích thước nhỏ nhất. Đây là trong javadoc của GridData. – christopheml

+1

Điều này có vẻ không đúng (có thể API đã thay đổi?), [Hàm tạo 'GridData (chiều rộng int, chiều cao int)'] (http://help.eclipse.org/juno/index.jsp?topic=%2Forg. eclipse.platform.doc.isv% 2Freference% 2Fapi% 2Forg% 2Feclipse% 2Fswt% 2Flayout% 2FGridData.html) đặt kích thước tối thiểu và không thể được sử dụng với các hằng số SWT này. – Kapep

4

Định vị các phần tử trong một Component phụ thuộc vào đối tượng Layout mà bạn đang sử dụng. Trong mẫu được cung cấp, bạn đang sử dụng GridLayout. Điều đó có nghĩa, bạn cần cung cấp một đối tượng LayoutData cụ thể để chỉ ra cách bạn muốn hiển thị thành phần của mình. Trong trường hợp GridLayout, đối tượng là GridData.

Để đạt được những gì bạn muốn, bạn phải tạo một đối tượng GridData mà grabs tất cả các không gian theo chiều ngang và lấp đầy nó:

// Fills available horizontal and vertical space, grabs horizontal space,grab 
// does not grab vertical space 
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, false); 
text.setLayoutData(gd); 

cách Alternative bao gồm sử dụng một LayoutManager khác nhau, chẳng hạn như FormLayout. Bố cục này sử dụng một đối tượng FormData cũng cho phép bạn chỉ định cách thành phần sẽ được đặt trên màn hình.

You can also read this article on Layouts to understand how Layouts work.

Là một lưu ý phụ, hàm tạo mới GridData (kiểu int) được đánh dấu là "không được đề xuất" trong tài liệu. Thay vào đó, hàm tạo rõ ràng được hiển thị trong ví dụ này được ưu tiên.

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