Java 如何在JFace向导中动态创建控件

Java 如何在JFace向导中动态创建控件,java,eclipse-plugin,swt,eclipse-rcp,jface,Java,Eclipse Plugin,Swt,Eclipse Rcp,Jface,我有一个jFace向导,我正在使用它创建一个新的项目类型eclipse插件。正如你们从下图中看到的,我在左侧有一个treeviewer,在右侧有一个SWT组。我想要的是,当用户从treeviewer中选择一个项目时,我应该能够在右侧SWT组上创建动态控件。假设用户选择测试一,一个右侧,我应该能够在右侧创建一些控件,如标签、文本和几个单选按钮,同样,如果用户选择测试二,我应该能够在右侧创建动态控件。 目前我尝试了以下代码: tree.addSelectionListener(new Select

我有一个jFace向导,我正在使用它创建一个新的项目类型eclipse插件。正如你们从下图中看到的,我在左侧有一个treeviewer,在右侧有一个SWT组。我想要的是,当用户从treeviewer中选择一个项目时,我应该能够在右侧SWT组上创建动态控件。假设用户选择测试一,一个右侧,我应该能够在右侧创建一些控件,如标签、文本和几个单选按钮,同样,如果用户选择测试二,我应该能够在右侧创建动态控件。

目前我尝试了以下代码:

tree.addSelectionListener(new SelectionAdapter() {
     @Override
 public void widgetSelected(SelectionEvent e) {
     for (int i = 0; i < selection.length; i++) {

     String tempStr = selection[i].toString();
     tempStr = tempStr.replaceAll("TreeItem \\{", "");
     String finalStr = tempStr.replaceAll("\\}", "");

         if (finalStr.equals("Test One")) {
             Button btn = new Button(g2, SWT.NONE); //g2 is right side group

             btn.setText("Blaaaa");

             btn.setVisible(true);
             container.redraw();
         }

}
tree.addSelectionListener(新的SelectionAdapter(){
@凌驾
公共无效WidgeSelected(SelectionEvent e){
for(int i=0;i

但是当我运行时,我在正确的组上看不到任何更改。有人能告诉我我做错了什么吗?任何指针都将非常感谢,因为我是Eclipse开发和SWT的新手。

您可能没有在
g2
组上设置布局。这是控件不显示的常见原因。您也可以尝试使用
g2.layout()
以确保新控件在创建后正确布局


此外,您还可以考虑使用,这样,一旦创建了一组控件,您就可以一次将它们全部隐藏起来,而不是在选择更改时销毁。这通常很有用,这样,如果用户返回到以前的选择,他们将发现在切换选择时以相同状态输入的数据。

很可能没有在
g2
组上设置布局。这是控件未显示的常见原因。您也可以尝试使用
g2.layout()
来确保创建新控件后正确布局

此外,您还可以考虑使用,以便在创建一组控件后,您可以一次将它们全部隐藏,而不是在选择更改时销毁。这通常非常有用,这样,如果用户返回到以前的选择,他们将在切换选择时发现以相同状态输入的数据