SWT组合禁用项目

时间:2014-01-20 10:06:08

标签: java combobox swt


我正在寻找一个小任务的解决方案 我正在使用SWT 我有一个Combo课程:

public class ComboBoxComponent<T> extends Combo {
    private ComboViewer comboListViewer;

    public ComboBoxComponent(Composite composite, int i) {
        super(composite, i);
        comboListViewer = new ComboViewer(this);
        setVisibleItemCount(15);
        comboListViewer.setContentProvider(new org.eclipse.jface.viewers.ArrayContentProvider());
        comboListViewer.setLabelProvider(new LabelProvider());
    }

    public void setDataModelList(T defaultObject, Collection<T> obj) {
        Collection<T> defaultCollection = new LinkedHashSet<T>();
        if (defaultObject != null)
            defaultCollection.add(defaultObject);
        defaultCollection.addAll(obj);
        comboListViewer.setInput(defaultCollection);
        select(0);
        notifySelection();
    }

    public void notifySelection() {
        Event event = new Event();
        event.type = SWT.Selection;
        event.widget = this;
        event.display = getDisplay();
        event.time = (int) new Date().getTime();
        this.notifyListeners(SWT.Selection, event);
    }

    @Override
    protected void checkSubclass() {

    }
}

我想禁用在组合中选择一些项目,我该怎么办?

2 个答案:

答案 0 :(得分:1)

使用SWT,禁用ComboBox无法使用的项目,您可以删除它们。你可以使用Swing的JComboBox来禁用项目。

您可以桥接Swing组件,创建一个SWT_AWT框架和一个像这样的AWT面板

java.awt.Frame frame = SWT_AWT.new_Frame();
java.awt.Panel panel = new java.awt.Panel(new java.awt.BorderLayout());

然后将Swing JComboBox添加到面板中。

panel.add(jComboBox);

这是一个将Swing嵌入SWT的教程

http://www.java2s.com/Tutorial/Java/0280__SWT/EmbededSwingAWTcomponentstoSWT.htm

答案 1 :(得分:0)

首先不要将项目放入组合列表中来禁用项目。如果他们不可选择,他们为什么要在那里?

使用存储类(例如ArrayList)来保存数据,然后通过循环将输入元素输入到组合列表中,同时排除那些不需要的元素。

您可以随时使用combo.remove(int start, in end);删除已添加到组合列表中的特定位置的商品。

此外,您可以防止该项目在被选中后被使用。您可以通过检查它的名称或索引号来执行此操作,然后防止它在某处使用,同时提示用户(如果这是您正在使用的逻辑)是一个好主意。