Java 要查看SWT组合项时,需要创建SWT组合项

Java 要查看SWT组合项时,需要创建SWT组合项,java,eclipse,events,combobox,swt,Java,Eclipse,Events,Combobox,Swt,我在eclipse插件中有一些Combo,当Combo即将打开时,我需要动态创建这些Combo。我需要这个,因为系统状态可以更改,我希望组合项能够反映这一点。这些更改与eclipse无关,因此无法通知我 我可以用focusListener的focusgound方法轻松做到这一点,但只有在失去焦点后获得焦点时才会发生这种情况。我希望在用户每次单击组合时更新项目,即使没有鼠标离开焦点或单击其他位置 我也尝试了mouseDown事件,但是组合得到了一个丑陋的滚动条,因为它是在我添加项目之前绘制的 你知

我在eclipse插件中有一些Combo,当Combo即将打开时,我需要动态创建这些Combo。我需要这个,因为系统状态可以更改,我希望组合项能够反映这一点。这些更改与eclipse无关,因此无法通知我

我可以用focusListener的focusgound方法轻松做到这一点,但只有在失去焦点后获得焦点时才会发生这种情况。我希望在用户每次单击组合时更新项目,即使没有鼠标离开焦点或单击其他位置

我也尝试了mouseDown事件,但是组合得到了一个丑陋的滚动条,因为它是在我添加项目之前绘制的

你知道我应该用什么吗


提前感谢,Oren

好的,问题是,在添加了要以正确大小显示的项目后,组合的父项的布局需要重新布局

但是,当您这样做时,组合将关闭。您可以通过编程再次打开它,但这看起来不是很好,因为它会闪烁打开,然后关闭,然后再次打开

然而,这是我现在能想到的最好的解决方案:

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new FillLayout());

    ToolBar bar = new ToolBar(shell, SWT.NONE);
    bar.setLayout(new FillLayout());

    final Combo combo = new Combo(bar, SWT.READ_ONLY);

    Listener listener = new Listener()
    {
        @Override
        public void handleEvent(Event event)
        {
            combo.removeAll();

            combo.add("A");
            combo.add("B");
            combo.add("C");

            combo.getParent().layout();
            combo.setListVisible(true);
        }
    };

    combo.addListener(SWT.MouseDown, listener);

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

刚刚尝试了你的解决方案,我仍然得到了我试图避免的卷轴。但是没有闪烁…@orensaid组合的父级是否有布局,或者您是否手动设置大小?我不是手动设置,但是组合是菜单贡献,并且位于工具栏中(如果有)helps@OrenSarid更新了我的代码以使用工具栏。现在无法在RCP中测试它。你能测试一下这个代码是否适合你吗?如果没有,请发布您正在使用的操作系统以及SWT的版本。您的代码是独立的,没有问题。但是当在eclipse工具栏上使用它时,我得到了滚动条。