私は選択リスナーの中で初期化している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);
}
}
私は洞察を深めることができます。この質問の内容が不明な場合はお知らせください。ありがとうございました!
ああ、すべてのウィジェットでsetContent()を呼び出す必要がありますか?私はそれがコンポジットで起こる必要があると思っていた。私が知っていることを示しています。ありがとうございました! – Sarah
こんにちはサラ、実際にあなたは誤解しました。 ScrollledCompositeにのみsetContent()メソッドがあります。 – LppEdd
'setContent'を' ScrolledComposite'で呼び出す必要があります - あなたの 'consoleComposite'は実際にはあなたが望むものではない' ScrolledComposite'です。 –