2012-08-24 28 views
0

這是我的代碼,實際上所有的圖形用戶界面工作的領域(右側包含在圖片附加)。在這個功能我正在做的是我創建一個複合「測試」的「newTabFolder」。然後我在它上面創建ScrolledComposite「sc」,然後在它上面創建一個複合「compositeInTab」,並且在把所有的部件放在「compositeInTab」後,我創建一個TabItem來放置組合「test」。爲什麼使用ScrolledComposite SWT時,放置在TabItem上的小部件不可見?

public DomainUI(Composite composite, TabFolder newTabFolder, boolean comingFromSelf) 
{ 
    Composite test = new Composite(newTabFolder,SWT.NONE); 
    test.setLayout(new FillLayout()); 
    ScrolledComposite sc = new ScrolledComposite(test, SWT.V_SCROLL|SWT.H_SCROLL); 
    final Composite compositeInTab = new Composite(sc, SWT.NONE); 
    sc.setExpandHorizontal(true); 
    sc.setExpandVertical(true); 
    sc.setMinHeight(compositeInTab.computeSize(SWT.DEFAULT, SWT.DEFAULT).y); 
    sc.setMinWidth(compositeInTab.computeSize(SWT.DEFAULT, SWT.DEFAULT).x); 
    sc.setContent(compositeInTab); 
    compositeInTab.setLayout(null); 
    sc.setAlwaysShowScrollBars(true); 

    /*HERE I AM CREATING LABELS AND TEXT FIELDS AND SETTING THEIR BOUNDS*/ 
    systemCodeLabel = new Label(compositeInTab, 0); 
    systemCodeText = new Text(compositeInTab, SWT.BORDER); 
    systemCodeLabel.setText("System Code"); 
    systemCodeLabel.setBounds(350, 60, 100, 15); 
    systemCodeText.setBounds(480, 60, 150, 17); 
    // CREATION OF LABELS AND TEXTFIELDS ENDED 

    // CREATION OF TABLE STARTS 
    myTable = new CreateTable(compositeInTab, 1); 
    myTable.setBounds(50, 230, 0, 0); 
    myTable.table.setSize(myTable.table.computeSize(570, 250)); 

    //here i filled data in table 

    for(int i=0; i<myTable.table.getColumnCount(); i++) 
    { 
     myTable.table.getColumn(i).pack(); 
    myTable.table.getColumn(i).setWidth(myTable.table.getColumn(i).getWidth()+10); 
    } 

    TabItem tabItem1 = new TabItem(newTabFolder, SWT.NONE); 
    tabItem1.setText("Domain"); 
    tabItem1.setControl(test); 
    newTabFolder.setBounds(0, 0, 480, 300); 
} 

回答

0

這似乎是一個佈局問題。我擺弄了一下,並設法得到這個工作:

public static void main(String[] args) 
{ 
    Display display = Display.getDefault(); 
    Shell shell = new Shell(display); 
    shell.setLayout(new FillLayout()); 

    ScrolledComposite scrollComp = new ScrolledComposite(shell, SWT.V_SCROLL | SWT.H_SCROLL); 
    Composite innerComp = new Composite(scrollComp, SWT.NONE); 
    innerComp.setLayout(new GridLayout(4, true)); 

    for(int i = 0; i < 32; i++) 
     new Button(innerComp, SWT.PUSH).setText("Button"); 

    scrollComp.setMinHeight(innerComp.computeSize(SWT.DEFAULT, SWT.DEFAULT).y); 
    scrollComp.setMinWidth(innerComp.computeSize(SWT.DEFAULT, SWT.DEFAULT).x); 
    scrollComp.setContent(innerComp); 
    scrollComp.setExpandHorizontal(true); 
    scrollComp.setExpandVertical(true); 
    scrollComp.setAlwaysShowScrollBars(true); 

    shell.pack(); 
    shell.open(); 

    shell.setSize(200, 200); 

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

它會顯示滾動條。但是,如果我將外殼的佈局更改爲GridLayout,它將無法工作。也許你的「佈局組合」似乎是問題...

+0

我的代碼工作時,我測試佈局設置爲FillLayout()。 :) –

+0

@MubashirKamran太棒了。玩得開心:) – Baz

+0

但你能告訴我關於兩個問題還在嗎?首先是滾動條現在正在顯示,但它們不能滾動以顯示其他數據,其次是當我增加newTabFolder界限時,它將不在屏幕上,那麼所有的小部件和滾動條也將不在屏幕上。如何管理這些? –

相關問題