Как сделать выпадающий список JComboBox шире, чем сам JComboBox? - PullRequest
5 голосов
/ 19 октября 2010

Обращаясь к ответу на Комбинированное окно с несколькими столбцами для Swing , мне удается реализовать 3-столбчатый JComboBox следующим образом.

alt text

Однако это не идеально. Я намерен сделать что-то без горизонтальной полосы прокрутки, как следует. alt text

У меня вопрос: как я могу получить раскрывающийся список JComboBox, который шире самого JComboBox? Я просто хочу избавиться от горизонтальной полосы прокрутки. Тем не менее, можно разместить 3 столбца в одном списке.

Исходный код ResultSetCellRenderer и AjaxAutoCompleteJComboBox

Ответы [ 2 ]

4 голосов
/ 21 октября 2010

Я решил проблему с помощью следующего форума Oracle Java Swing Forum

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

AjaxAutoCompleteJComboBox.java

1 голос
/ 24 декабря 2010

У меня была такая же проблема, поэтому я создал следующий метод

 /**
     * 
     * @param box is the ComboBox that is about to show its own popup menu
     * @param metrics is used to calculate the width of your combo box's items
     */
    public static void adjustPopupWidth(JComboBox box,FontMetrics metrics) {
        if (box.getItemCount() == 0) {
            return;

        }
        Object comp = box.getUI().getAccessibleChild(box, 0);
        if (!(comp instanceof JPopupMenu)) {
            return;
        }


        //Find which option is the most wide, to set this width as pop up menu's preferred!
        int maxWidth=0;
        for(int i=0;i<box.getItemCount();i++){
            if(box.getItemAt(i)==null)
                continue;
            int currentWidth=metrics.stringWidth(box.getItemAt(i).toString());
            if(maxWidth<currentWidth)
                maxWidth=currentWidth;
        }
        JPopupMenu popup = (JPopupMenu) comp;
        JScrollPane scrollPane = (JScrollPane) popup.getComponent(0);
        Dimension size = scrollPane.getPreferredSize();
        // +20, as the vertical scroll bar occupy space too.
        size.width = maxWidth+20;
        scrollPane.setPreferredSize(size);
        scrollPane.setMaximumSize(size);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...