2010-10-19 5 views
5

Обратившись к ответу на вопрос Multi Columns Combo Box for Swing, мне удалось реализовать 3 многоканальных столбца JComboBox, как следует.Как получить раскрывающийся список JComboBox, который шире, чем сам JComboBox

alt text

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

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

Исходный код являются ResultSetCellRenderer и AjaxAutoCompleteJComboBox

ответ

4

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

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

AjaxAutoCompleteJComboBox.java

+1

Какая часть в частности? – jjnguy

1

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

/** 
    * 
    * @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); 
    } 
Смежные вопросы