2011-10-12 40 views

Trả lời

28

Bạn có thể chỉ định các bit phong cách Shell bằng cách sử dụng các nhà xây dựng hai arg . Các bit phong cách mặc định là SWT.SHELL_TRIM:

public static final int SHELL_TRIM = CLOSE | TITLE | MIN | MAX | RESIZE; 

Bạn thực sự muốn loại bỏ các bit RESIZE. Nếu bạn đang tạo của riêng bạn Shell:

final Shell shell = new Shell(parentShell, SWT.SHELL_TRIM & (~SWT.RESIZE)); 

Nếu bạn đang mở rộng Dialog, bạn có thể ảnh hưởng đến các bit kiểu vỏ bằng overridding getShellStyle:

@Override 
protected int getShellStyle() 
{ 
    return super.getShellStyle() & (~SWT.RESIZE); 
} 
4

Bạn có thể kiểm soát đồ nội thất khi bạn khai báo vỏ. Tôi nghĩ rằng ví dụ này làm những gì bạn muốn;

import org.eclipse.swt.SWT; 
import org.eclipse.swt.graphics.Rectangle; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Event; 
import org.eclipse.swt.widgets.Listener; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Text; 

public class FixedWindow { 
    public static void main(String[] args) { 
     Display display = new Display(); 

     //final Shell shell = new Shell(display); //defaults 
     //final Shell shell = new Shell(display, SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX); //can be maximised 
     final Shell shell = new Shell(display, SWT.CLOSE | SWT.TITLE | SWT.MIN); // fixed but can be minimised 
     //final Shell shell = new Shell(display, SWT.TITLE); // fixed, uncloseable, unminimisable can only be removed by OS killing JVM. 

     Rectangle boundRect = new Rectangle(0, 0, 1024, 768); 
     shell.setBounds(boundRect); 
     Rectangle boundInternal = shell.getClientArea(); 

     shell.setText("Fixed size SWT Window."); 

     shell.open(); 

     final Text text = new Text(shell, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER); 

     text.setEditable(true); 
     text.setEnabled(true); 
     text.setText("Oh help!"); 
     text.setBounds(boundInternal); 


     while (!shell.isDisposed()) { 

      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 
} 
+0

cảm ơn, thực sự tôi đã giải quyết nó trong khi chờ đợi bằng cách thêm: "Shell mới (hiển thị, SWT.CLOSE | SWT.TITLE)" và câu trả lời của bạn cũng giống nhau nhưng có thêm MIN – alhcr

-1

Tôi không chắc chắn về điều đó, nhưng tôi nghĩ rằng bạn chỉ có thể thả sự kiện SWT.Resize như thế này:

shell.addListener (SWT.Resize, new Listener() { 
    public void handleEvent (Event e) 
    { 
     return; 
    } 
}); 
+2

Điều này không hoàn toàn hoạt động trong thực tế - thay đổi kích thước Trình lắng nghe được kích hoạt sau khi cửa sổ đã được thay đổi kích thước, không phải trước đó, do đó, thiết lập 'e.doit' thành false không có hiệu lực. Trên một số nền tảng, bạn có thể thử thiết lập kích thước của vỏ ** thành **, nhưng điều này có vẻ lạ trên một số nền tảng (đặc biệt là thay đổi kích thước wireframe hoặc nền tảng cho phép thay đổi kích thước trước khi kích hoạt sự kiện đó. Trên các nền tảng khác, bạn thực sự nhận được một vòng lặp vô hạn của các sự kiện khi bạn thay đổi kích thước một trình bao bên trong trình lắng nghe thay đổi kích thước (trừ khi bạn đặt cờ rằng bạn đang thay đổi kích thước.) –

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