2011-10-12 11 views

risposta

28

È possibile specificare i bit di stile Shell utilizzando il costruttore a due arg . I bit di stile di default sono SWT.SHELL_TRIM:

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

si vuole realmente di escludere il bit RESIZE. Se si sta creando il proprio Shell:

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

Se stai estendendo Dialog, si può influenzare i bit di stile shell overridding getShellStyle:

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

È possibile controllare i mobili quando si dichiara il guscio. Penso che questo esempio faccia ciò che vuoi;

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

grazie, in realtà l'ho risolto nel frattempo aggiungendo: "nuova shell (display, SWT.CLOSE | SWT.TITLE)" e la tua risposta fa lo stesso ma ha anche MIN – alhcr

-1

Non sono sicuro su di esso, ma penso che si può solo cadere evento SWT.Resize come questo:

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

Questo non funziona nella pratica - il ridimensionamento il listener viene attivato dopo che la finestra è stata ridimensionata, non prima, quindi l'impostazione di 'e.doit' su false non ha alcun effetto. Su alcune piattaforme, puoi provare a impostare la dimensione della shell ** indietro ** su quello che era, ma su alcune piattaforme sembra strano (specialmente con il ridimensionamento del wireframe o piattaforme che consentono una buona dose di ridimensionamento prima di attivare quell'evento.) Su altre piattaforme, si ottiene effettivamente un ciclo infinito di eventi quando si ridimensiona una shell all'interno di un listener di ridimensionamento (a meno che non si imposti un flag per il quale si modifica la dimensione). –

Problemi correlati