2010-10-19 14 views
5

Facendo riferimento alla risposta allo Multi Columns Combo Box for Swing, riesco a implementare un JComboBox a 3 colonne come segue.Come avere l'elenco a discesa JComboBox che è più ampio dello stesso JComboBox

alt text

Tuttavia, questo non è perfetto. La mia intenzione è di avere qualcosa senza la barra di scorrimento orizzontale, come segue. alt text

La mia domanda è, come posso avere un elenco a discesa JComboBox, che è più ampio del JComboBox stesso? Voglio solo sbarazzarmi della barra di scorrimento orizzontale. Ancora, in grado di inserire 3 colonne in un'unica lista.

Il codice sorgente sono ResultSetCellRenderer e AjaxAutoCompleteJComboBox

risposta

1

Ho avuto lo stesso problema, così ho creato il seguente metodo

/** 
    * 
    * @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); 
    } 
Problemi correlati