2017-03-21 7 views
0

私は選択リスナーの中で初期化しているScrolledCompositeウィジェットを持っています(順番に別のコンポジットにアタッチされています)。このScrolledCompositeには、次にButtonとLabelを保持する別のCompositeが含まれています。内部コンポジットが表示されている間は、その子ウィジェットのいずれも行いません。以前私はScrolledCompositeを使いましたが、すべてが私の目に見えます。誰か間違ったことを見ることができますか? ScrolledCompositeはクラス変数であることに注意してください。また、この問題は、コンポジットとその内容をelse条件で処分するかどうかにかかわらず発生していることにも注意してください。ScrolledCompositeの子どもたちがコンテンツを設定していない

final Button showConsole = new Button(topLeft, SWT.CHECK); 
    showConsole.setText("Show Debug Console"); 
    showConsole.setFont(new Font(domains.getDisplay(), "Segoe UI", 9, SWT.ITALIC)); 
    showConsole.setSelection(false); 
    showConsole.addSelectionListener(new SelectionListener() { 
     @Override 
     public void widgetSelected(SelectionEvent e) { 
      //The total widget group is only supposed to appear when the button is selected 
      if (showConsole.getSelection()) { 
       scrolledConsoleComp = new ScrolledComposite(leftComposite, 
         SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); 
       Composite consoleComposite = new ScrolledComposite(scrolledConsoleComp, SWT.NONE | SWT.BORDER); 
       consoleComposite.setLayout(new GridLayout()); 
       consoleComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
       consoleComposite.setVisible(true); 

       scrolledConsoleComp.setContent(consoleComposite); 
       scrolledConsoleComp.setExpandHorizontal(true); 
       scrolledConsoleComp.setExpandVertical(true); 
       scrolledConsoleComp.setLayout(new GridLayout()); 
       scrolledConsoleComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

       Button clear = new Button(consoleComposite, SWT.PUSH); 
       clear.setText("Clear Console"); 

       final Label consoleText = new Label(consoleComposite, SWT.WRAP); 
       consoleText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); 
       consoleText.setText("Messages: \n" + consoleData); 
       clear.addSelectionListener(new SelectionListener() { 
        @Override 
        public void widgetSelected(SelectionEvent e) { 
         consoleData = ""; 
         consoleText.setText("Messages: \n" + consoleData); 
        } 

        @Override 
        public void widgetDefaultSelected(SelectionEvent e) { 
        } 
       }); 
       scrolledConsoleComp.setMinSize(leftComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
       leftComposite.layout(true); 

      } else { 

       scrolledConsoleComp.setVisible(false); 
       scrolledConsoleComp.dispose(); 
       leftComposite.layout(true); 
      } 
     } 

私は洞察を深めることができます。この質問の内容が不明な場合はお知らせください。ありがとうございました!

答えて

0

ButtonLabelScrolledCompositeの内部に作成しています。 setContent()が呼び出されていないため、表示されません。

通常、ScrolledCompositeには、他のすべてのウィジェットを保持するCompositeが含まれています。

あなたconsoleCompositeCompositeになるはずです。
setVisible()

+0

ああ、すべてのウィジェットでsetContent()を呼び出す必要がありますか?私はそれがコンポジットで起こる必要があると思っていた。私が知っていることを示しています。ありがとうございました! – Sarah

+0

こんにちはサラ、実際にあなたは誤解しました。 ScrollledCompositeにのみsetContent()メソッドがあります。 – LppEdd

+1

'setContent'を' ScrolledComposite'で呼び出す必要があります - あなたの 'consoleComposite'は実際にはあなたが望むものではない' ScrolledComposite'です。 –

関連する問題