Как изменить размер выпадающего списка?

Фон:   Я выполняю некоторые работы пользовательского интерфейса в среде eclipse, где я заполняю комбо-элемент управления с некоторыми значениями. Строковые значения имеют разную длину и часто длину, превышающую ширину комбо и ширину исходного композита.

Проблема:   Когда я открываю раскрывающийся список, ширина списка больше, чем ширина родительского композита, и пользователь не может видеть полное значение записи в списке.

Я попытался использовать параметр 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);

Привет Dirk

Ответы

Ответ 1

При создании combobox укажите горизонтальную прокрутку и

this.mComponentName = new Combo (lComponentComposite, SWT.BORDER|SWT.H_SCROLL);  

Это не позволит переполнению текста

Ответ 2

Это действительно хороший вопрос. После копания через форумы разработчиков и даже исходный код я склоняюсь к словам, что это невозможно.

Я решил проблему временно, переключившись на CCombo, но мне не нравится решение, так как я считаю, что одна из сильных сторон SWT в использовании собственных виджетов, а CCombo выглядит не так хорошо (по крайней мере, на Win7 и OS X).

Ответ 3

Когда вы выбираете раскрывающееся поле со списком или раскрывающимся списком для его размера, активны только правые и левые маркеры. Используйте эти ручки, чтобы установить ширину окна, как оно отображается на начальном этапе. Выберите стрелку раскрывающегося списка справа от поля со списком. Контур элемента управления изменяется, чтобы отобразить размер поля со списком с выпадающей областью.

Используйте нижний маркер размера, чтобы изменить начальный размер раскрывающегося списка. Снова выберите стрелку раскрывающегося списка, чтобы закрыть раскрывающуюся часть комбинированного блока.

Ответ 4

Вы пытались передать какое-то другое значение в качестве второго параметра в своей инициализации Combo (первая строка)? Что-то другое, кроме SWT.BORDER?

Я попытался выяснить, можно ли отображать строки в нескольких строках (как отдельный элемент со списком), но без успеха. Это уменьшит ширину ваших предметов. Попробуйте добавить \n к нескольким строкам, которые вы добавляете в поле со списком, и посмотреть, будет ли это работать. Если это сработает, вы можете автоматизировать этот процесс позже, проанализировав строку и проверив, достигает ли число символов пробела до максимума и добавляет \n после каждого пятого или шестого пробела. Я думаю, что предложение codejammer является лучшим, но я пока не могу его продвинуть.

Ответ 5

Частично решена проблема с добавлением в имена элементов некоторых пробелов (задано количество пробелов методом проб и ошибок). Теперь combo шире, и все тексты видны, однако горизонтальная прокрутка также видна.

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));
    }
});

Ответ 6

combo.setPreferredSize(new Dimension(FIX_WIDTH, FIX_HEIGHT));

Ответ 7

Попробуйте это

           JComboBox CB = new JComboBox();
           CB.setPreferredSize(new Dimension(int, int)); 
           p.add(CB);// which p is a JPanel