0

eclipsercpのダイアログでいくつか問題が発生しています。マスターパーツのテーブルに表示される任意の数のエンティティを管理するためのMasterDetailBlockを表示するダイアログが必要であり、対応するDetailPagesが詳細パーツに表示されます。現在のところ、これはビューを使用して実行されますが、非モーダルダイアログの方が適しているようです。

最初は、ビューからコードを取り出してダイアログに配置するという単純な方法を試しましたが、ビューとダイアログの作成の違いにより、いくつかの変更が加えられました。ただし、ほとんどのコントロールがありませんでした。Google、Eclipseフォーラム、そしてここStackoverflowでの検索では、これに対する解決策は得られませんでした。これらのサイトで解決策を確認した後、デバッガーを使用してコードをステップ実行することで何が起こっているのかを理解しようとしましたが、それも役に立ちませんでした。

次のコードは、ボタンを表示するセクションを含むダイアログを表示する必要があります。ただし、そうではありません。

protected Control createDialogArea(Composite parent) {

    parent.setLayout(new GridLayout(1, true));

    Section section = toolkit.createSection(parent, ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR);
    section.setLayout(new GridLayout());
    section.setText("Section");
    section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Button test = toolkit.createButton(section, "test", SWT.PUSH);
    test.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    test.setVisible(true);

    section.computeSize(SWT.DEFAULT, SWT.DEFAULT);
    return parent;
}

この結果は次のとおりです。

上記のコードの結果、ボタン

ただし、MasterDetailBlockにはフォームが必要なため、次のコードも提供します。

protected Control createDialogArea(Composite parent) {

    parent.setLayout(new GridLayout(1, true));

    form = new ScrolledForm(parent);
    form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    form.getBody().setLayout(new FillLayout());
    Composite formComposite = toolkit.createComposite(form.getBody());
    formComposite.setLayout(new GridLayout(1,true));

    Section section = toolkit.createSection(formComposite, ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR);
    section.setLayout(new GridLayout());
    section.setText("Section");
    section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Button test = toolkit.createButton(section, "test", SWT.PUSH);
    test.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    test.setVisible(true);



    section.computeSize(SWT.DEFAULT, SWT.DEFAULT);
    return parent;
}

ダイアログにフォームを追加することでわずかな変更を加えるだけで、すべてがフォームに反映されます。ただし、結果は次のようになります。

ここに画像の説明を入力してください

ここで明らかな何かが欠けているのではないかと思います。私が言ったように、検索は何の啓発ももたらさず、コードをステップスルーすることも役に立ちませんでした。私の最後の手段である「何が起こるかを見て理解しようとする」ことは、結果がすでに投稿されたものから変わらなかったので、あまり役に立ちませんでした。

それで、私は何かが恋しいですか?(私が思うに)何が悪いのか(またはあなたの経験からの何か)を私に示すためのリンクを私に提供してくれれば、私はそれを認めます。

ご協力ありがとうございました。

4

1 に答える 1

0

があります

section.setClient(test);

ない。さらに、フォームを使用し、セクションが展開可能な場合は、これが必要です。

protected final IExpansionListener expansionListener= new ExpansionAdapter()
{
  /**
   * {@inheritDoc}
   */
  @Override
  public void expansionStateChanged(ExpansionEvent e)
  {
    ScrolledForm form = ...; //your scrolled form goes here
    form.layout(new Control[] {(ExpandableComposite) e.getSource()}, SWT.ALL | SWT.CHANGED);
    form.reflow(true);
  }  
};

...

section.addExpansionListener(expansionListener);

ボタンの代わりに、ボタンを含むtestを追加する必要Compositeがあります。各セクションには、1 つのクライアントのみを含めることができます。

于 2013-03-15T11:47:50.837 に答える