Pencerenin yeniden boyutlandırılmasını devre dışı bırakmak istiyorum. Herhangi bir fikir?SWT Java: Pencerenin yeniden boyutlandırılmasını nasıl önleyebilirim?
cevap
İ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);
}
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();
}
}
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
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;
}
});
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. –
olası yinelenen (http://stackoverflow.com/questions/5191515/non-resizable-window-with-jface) –