如何调整组合框的下拉列表?

时间:2010-11-18 08:32:11

标签: java combobox swt

背景:     我在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);

问候 德克

7 个答案:

答案 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