2013-08-20 61 views
0

我正在嘗試更改組合的大小。 我用下面的方法做。Swt調整複合但不是窗口

GridData gd = (GridData)parent_.getLayoutData(); 
gd.heightHint = (int)(parent_.getSize().y/1.73); 

因此,當執行某個操作時,我想調整該組件的大小並使其更小。然而,在確定之後,我必須做getShell().pack();,並且每當我這樣做,會發生什麼情況是組件所在的整個窗口占用的垂直空間與屏幕上可用的空間一樣多。任何想法如何防止窗戶做到這一點?如果你能指出我正確的方向,我對swt非常不滿,也會喜歡一些教程。

回答

3

你不必調用pack()改變GridData後,在Shell調用layout()足夠:

public static void main(String[] args) 
{ 
    Display display = Display.getDefault(); 
    final Shell shell = new Shell(display); 
    shell.setLayout(new GridLayout(1, true)); 

    final Composite resizable = new Composite(shell, SWT.BORDER); 
    new Label(resizable, SWT.NONE).setText("Content"); 

    final GridData data = new GridData(SWT.FILL, SWT.BEGINNING, true, true); 
    data.heightHint = 200; 

    resizable.setLayoutData(data); 

    Button button = new Button(shell, SWT.PUSH); 
    button.setText("Resize"); 
    button.addListener(SWT.Selection, new Listener() 
    { 
     @Override 
     public void handleEvent(Event arg0) 
     { 
      data.heightHint /= 2; 
      shell.layout(); 
     } 
    }); 

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

之前按下按鈕:

enter image description here

按下該按鈕後:

enter image description here


至於教程:

+0

驚人!謝謝,一旦冷卻時間消失,我會盡快接受你。 – Quillion

+0

@Quillion很高興能幫到你。 – Baz