2011-10-12 23 views

cevap

28

İki-arg kurucu kullanarak Shell tarzı bitlerini belirtebilirsiniz . varsayılan stil bitleri SWT.SHELL_TRIM şunlardır:

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

Aslında RESIZE bit dışlamak istiyorum. Eğer Shell Kendi oluşturuyorsanız:

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

Eğer Dialog uzanan ediyorsanız, getShellStyle ı iptal ederek kabuk tarzı bit etkileyebilir: [JFace ile Sigara boyutlandırılabilir penceresinin] arasında

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

Kabuğu bildirdiğinizde mobilyaları kontrol edebilirsiniz. Bence bu örnek istediğini yapıyor;

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

Teşekkürler, aslında ekleyerek şunu çözdüm: "yeni Kabuk (ekran, SWT.CLOSE | SWT.TITLE)" ve cevabınız aynısını yapar ama ek olarak MIN – alhcr

-1

bu konuda emin değilim, ama sadece bu gibi SWT.Resize olayı bırakabilirsiniz düşünüyorum:

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

var. Bu pratikte pek işe yaramıyor - yeniden boyutlandırma Pencere yeniden boyutlandırıldıktan sonra değil, daha sonra değil, yani e.doit’in false değerinin ayarlanmasının etkisiz kalmasına neden olur. Bazı platformlarda, kabuğun boyutunu ** geri ** ayarlayabiliyorsunuz. Ancak bu, bazı platformlarda (özellikle tel çerçevenin yeniden boyutlandırılmasıyla) veya bu olayı ateşlemeden önce yeniden boyutlandırmaya izin veren platformlarda tuhaf görünüyor. Diğer platformlarda, yeniden boyutlandırılan bir dinleyicinin içindeki bir kabuğu yeniden boyutlandırdığınızda (aslında boyutu değiştirdiğiniz bir bayrağı ayarlamadığınız sürece) sonsuz bir olay döngüsü elde edersiniz. –