Как изменить размер выпадающего списка? - PullRequest
15 голосов
/ 18 ноября 2010

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

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

Я пытался использовать опцию "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 ]

1 голос
/ 11 августа 2012

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

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

1 голос
/ 23 июля 2012

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

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

1 голос
/ 28 февраля 2012

При создании комбинированного списка укажите Горизонтальную прокрутку также

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

Это не позволит тексту переполниться

0 голосов
/ 05 февраля 2013

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

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));
    }
});
0 голосов
/ 23 июля 2012

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

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

0 голосов
/ 21 июля 2012

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

           JComboBox CB = new JComboBox();
           CB.setPreferredSize(new Dimension(int, int)); 
           p.add(CB);// which p is a JPanel
0 голосов
/ 27 декабря 2010
combo.setPreferredSize(new Dimension(FIX_WIDTH, FIX_HEIGHT));
...