我写了以下代码,创建了一个小的“表”(它实际上不是一个表,而是两个标签粘在一起)。
private void createOptionsPrefs(final ExpandBar parent) {
final Composite optionsPrefsComposite = new Composite(parent, SWT.NONE);
optionsPrefsComposite.setLayout(new GridLayout(totalColumns, true));
/** Showing one of the non table labels that must not be deleted **/
final boolean dateEnabled = PM.getInstance().getStringPM(PT.DATE));
final String dateStatus = dateEnabled ? "Enabled" : "Disabled";
Label dateLabel, dateValueLabel;
dateLabel = new Label(optionsPrefsComposite, SWT.NONE);
dateLabel.setLayoutData(descLabelGridData);
dateLabel.setText(PT.DATE.getExplanationLabelText());
dateValueLabel = new Label(optionsPrefsComposite, SWT.NONE);
dateValueLabel.setLayoutData(valueLabelGridData);
dateValueLabel.setText(dateStatus);
valueOfVariableOrDependentWigets.put(dateStatus, dateValueLabel);
/** more code here - other labels **/
final GridData descLabelGridData = new GridData(SWT.FILL, SWT.FILL, true, true, horizontalSpanForClioCommandPrefs, 1);
final GridData valueLabelGridData = new GridData(SWT.FILL, SWT.FILL, true, true, totalColumns - horizontalSpanForClioCommandPrefs, 1);
final Label nameTitleLabel = new Label(optionsPrefsComposite, SWT.None);
nameTitleLabel.setText("Custom Name");
nameTitleLabel.setLayoutData(descLabelGridData);
final Label commandTitleLabel = new Label(optionsPrefsComposite, SWT.None);
commandTitleLabel.setText("Value");
commandTitleLabel.setLayoutData(valueLabelGridData);
for (final OptionsAll option : PM.getInstance().getOptionsList()) {
final Label nameLabel = new Label(optionsPrefsComposite, SWT.None);
nameLabel.setText(option.getName());
nameLabel.setLayoutData(descLabelGridData);
final Label commandLabel = new Label(optionsPrefsComposite, SWT.None);
commandLabel.setText(option.getValue());
commandLabel.setLayoutData(valueLabelGridData);
}
createExpandItem(optionsPrefsComposite, "Reporting Options", com.ui.Activator.getDefault().getImageRegistry().get(IImageKeys.LOGO.getPath()));
}
可以在相同的UI位置更新此表。我的意思是用户可以感觉到表格(在其他选项卡中),并且应该更新此“表格”。我想创建一种自动刷新方法,该方法将处理该表(而不是Composite)并添加一个新表。 起初,我虽然编写了以下功能:
private void refreshOptions() {
bar.getItem(optionExpandItemIndex).getControl().dispose();
final Composite optionsComposite = generateOptionList(bar);
bar.getItem(optionExpandItemIndex).setControl(optionsComposite);
}
但是它将从控件而不是表中处理。是否可以生成一个新表,删除旧表并添加一个新表?
也许添加一些事件监听器?我是SWT
的新手,因此我正在寻找解决方法的想法。