2010-11-27 8 views
6

Pencerem, iki farklı tür düzenine izin vermelidir (daha iyi açıklamak için basit bir örnek), ör.SWT ile bileşenlerin üst kısmı nasıl değiştirilir?

+-------------+-------------+-------------+ 
| Component 1 | Component 2 | Component 3 | 
|    |    |    | 
|    |    |    | 
|    |    |    | 
|    |    |    | 
+-------------+-------------+-------------+ 

ve kullanıcı bir menü öğesi kullanılarak, örneğin her ikisi arasında geçiş yapabilirsiniz

+-------------+---------------------------+ 
| Component 1 | Component 2    | 
|    |       | 
|    +---------------------------+ 
|    | Component 3    | 
|    |       | 
+-------------+---------------------------+ 

.

SWT ile bir bileşen oluştururken üst öğeyi sağlamanız gerekir. Ancak, (1) bileşeni yeniden kullanmamız ve (2) bunları farklı bir ebeveyne (yerleştirme çerçevelerine benzer şekilde) yerleştirmemiz gerekecektir. SWT ile bu nasıl mümkün olur?

cevap

7

Bunu bir bileşenin üst öğeyi değiştirerek yapabilirsiniz.

setParent() denetimin üst, temel işletim sistemi bunu destekliyorsa değiştirir. Daha sonra layout() kompozit yapabilirsiniz, böylece değişiklikler görünecektir.

  • bir kompozit c1 içeren dikey kontrolleri
  • bir kompozit c2 içeren yatay kontrolleri
  • bir etiket lbl
  • bir düğme btn

aşağıda açıklanmıştır:

üç kontrolleri Say kod:

public class ControlSwitcher { 
    public static void main(String[] args) { 
     Display display = new Display(); 
     final Shell shell = new Shell(display); 
     GridLayout gl = new GridLayout(); 
     gl.marginWidth = gl.marginHeight = 20; 
     shell.setLayout(gl); 

     final Composite c1 = new Composite(shell, SWT.NONE); 
     c1.setBackground(new Color(display, 255, 160, 160)); 
     RowLayout layout = new RowLayout(SWT.VERTICAL); 
     c1.setLayout(layout); 

     final Composite c2 = new Composite(c1, SWT.NONE); 
     c2.setBackground(new Color(display, 160, 255, 160)); 
     c2.setLayout(new RowLayout()); 

     final Label lbl = new Label(c2, SWT.NORMAL); 
     lbl.setText("Hello world"); 

     final Button btn = new Button(c2, SWT.PUSH); 
     btn.setText("Switch"); 
     btn.addSelectionListener(new SelectionListener() { 
      @Override 
      public void widgetSelected(SelectionEvent arg0) { 
       Composite target; 
       if (btn.getParent().equals(c2)) { 
        target = c1; 
       } else { 
        target = c2; 
       } 
       boolean success = btn.setParent(target); 
       if (success) { 
        target.pack(); 
        shell.pack(); 
       } else { 
        throw new RuntimeException("Not supported by this platform"); 
       } 
      } 

      @Override 
      public void widgetDefaultSelected(SelectionEvent arg0) { 
      } 
     }); 

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

Ebeveyn ayarının Windows, OS X ve Linux/GTK'da desteklenip desteklenmediğini biliyor musunuz? – Mot

+0

Hayır; Bunu sadece Vista'da test ettim. Bunu sizin için ofisinizde Pazartesi günü kontrol edebilirim. –

+0

Linux üzerinde test ettim ve çalışıyorum (GTB + 'nın varsayılan olarak Ubuntu/Kubuntu/Xubuntu'da kurulu olduğu varsayılarak). –