刷新SWT中的标签控制

时间:2019-06-27 23:37:40

标签: java widget swt grid-layout composite

我写了以下代码,创建了一个小的“表”(它实际上不是一个表,而是两个标签粘在一起)。

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的新手,因此我正在寻找解决方法的想法。

0 个答案:

没有答案