我的软件Java使用一个基本的插件系统,每个插件都允许您扩展一种方法,该方法将运行时对象插入Composite中,在代码中命名为“ content”,并使用BorderLayout插入SashForm中,以允许用户管理插件的选项。
发生的事情是,在“首选项”窗口中,新元素不会自动适应大小为0并因此不可见的其余窗口。
我设法使用setBounds()使它们可见的唯一方法
这是该方法的实现,通过该方法插件可以在“首选项”窗口中创建控件
class TestPref extends PreferenceNode{
public TestPref(){
System.out.println("Creating plugin preferences");
setTitle("Test plugin");
}
@Override
public void popolatePreferenzeComposite(Composite _composite, Properties _workbenchProp, Properties _userProp) {
Label lblPrometeoTestPlugin = new Label(_composite, SWT.NONE);
//lblPrometeoTestPlugin.setBounds(10, 10, 430, 15);
lblPrometeoTestPlugin.setText("Prometeo Test Plugin v.1.0.0");
}
}
这是“首选项”窗口的一种方法,当用户单击树菜单项时,该窗口会填充内容。
// Prometeo->Plugins
String itemPrometeoPlugins=ApplicationLauncher.texts.getString("com.gega.prometeo.workbanch.preferences.tree.prometeo.plugins");
tree.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
if(tree.getSelection()[0].getText().equals(itemPrometeoPlugins)) {
clearContent();
Table table = new Table(content, SWT.BORDER | SWT.FULL_SELECTION);
table.setLayoutData(BorderLayout.CENTER);
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableColumn tblclmnNome = new TableColumn(table, SWT.NONE);
tblclmnNome.setWidth(100);
tblclmnNome.setText("Nome");
TableColumn tblclmnVersione = new TableColumn(table, SWT.NONE);
tblclmnVersione.setWidth(100);
tblclmnVersione.setText("Versione");
TableColumn tblclmnStatus = new TableColumn(table, SWT.NONE);
tblclmnStatus.setWidth(100);
tblclmnStatus.setText("Status");
}
}
});
public void clearContent() {
for (Control control : content.getChildren()) {
control.dispose();
}
}
没有setBounds enter image description here 与setBounds enter image description here
非常感谢大家
答案 0 :(得分:0)
我能够以这种方式使用setBounds()找到解决方案
table.setBounds(0,0,content.getBounds()。width,content.getBounds()。height)