背景: 我在eclipse环境中做了一些UI工作,我用一些值填充了一个组合控件。字符串值具有不同的长度,通常长度大于组合宽度和父组合的宽度。
问题: 当我打开下拉列表时,列表的宽度大于父组合的宽度,用户无法看到列表条目的完整值。
我尝试使用“setTextLimit”选项,但没有成功。对我而言,如果我可以使用常数值设置dropdon列表的宽度,那就完全足够了。
代码示例:
this.mComponentName = new Combo (lComponentComposite, SWT.BORDER);
this.mComponentName.setTextLimit(COMBO_TEXT_LIMIT);
GridData componentNameGridData = new GridData();
componentNameGridData.widthHint = 166;
this.mComponentName.setLayoutData(componentNameGridData);
this.mComponentName.addSelectionListener(this.mComboSelectionAdapter);
this.mComponentName.addKeyListener(this.mComboKeyAdapter);
问候 德克
答案 0 :(得分:1)
创建组合框时,还指定水平滚动
this.mComponentName = new Combo (lComponentComposite, SWT.BORDER|SWT.H_SCROLL);
这不会让文本溢出
答案 1 :(得分:1)
这真是一个很好的问题。在深入研究开发人员论坛甚至源代码之后,我倾向于说这是不可能的。
我通过切换到CCombo
暂时解决了这个问题,但我不喜欢这个解决方案,因为我认为SWT的优势在于使用原生小部件,CCombo
看起来不太好(至少在Win7和OS X上)。
答案 2 :(得分:1)
当您选择下拉组合框或下拉列表框以调整其大小时,只有左右大小调整句柄处于活动状态。使用这些手柄设置最初显示的框的宽度。 选择组合框右侧的下拉箭头。 控件的轮廓将更改为显示组合框的大小,并且下拉区域已扩展。
使用底部大小调整手柄更改下拉区域的初始大小。 再次选择下拉箭头以关闭组合框的下拉部分。
答案 3 :(得分:0)
您是否尝试在Combo初始化(第一行)中传递一些其他值作为第二个参数? SWT.BORDER以外的东西?
我已经尝试找出是否可以在多行中显示字符串(作为单个组合框项目),但没有成功。这会减少商品的宽度。尝试将\ n添加到您添加到组合框的几个字符串中,看看它是否有效。如果它可以工作,您可以稍后通过解析字符串自动执行此过程,并检查空格字符数是否变高并在每五或第六个空白字符后添加\ n。我认为codejammer的建议是最好的,但我还不能投票。
答案 4 :(得分:0)
部分解决了向项目名称添加一些空格的问题(通过试验和错误设置了空格数)。现在组合更宽,所有文本都可见,但水平滚动也是可见的。
String p = " ";
combo.add("Long.... item name 1"+p);
combo.add("Long item name ..... 2"+p);
...
另一个灵魂是在失去焦点后获得焦点并恢复大小时调整大小。示例如下。
final Point p = combo.getSize();
combo.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
((Control) e.getSource()).setSize(p);
}
@Override
public void focusGained(FocusEvent e) {
((Control) e.getSource()).setSize(new Point(400, p.y));
}
});
答案 5 :(得分:-1)
combo.setPreferredSize(new Dimension(FIX_WIDTH, FIX_HEIGHT));
答案 6 :(得分:-2)
试试这个
JComboBox CB = new JComboBox();
CB.setPreferredSize(new Dimension(int, int));
p.add(CB);// which p is a JPanel