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