How to have JComboBox drop down list which is wider than the JComboBox itself

前端 未结 2 1722
被撕碎了的回忆
被撕碎了的回忆 2021-02-10 02:19

By referring to the answer at Multi Columns Combo Box for Swing, I manage to implement a 3 multi columns JComboBox as follow.

相关标签:
2条回答
  • 2021-02-10 02:45

    I got my problem resolved through the following forum Oracle Java Swing Forum

    For future reference, I include the complete workable source code, for anyone who are interested.

    AjaxAutoCompleteJComboBox.java

    0 讨论(0)
  • 2021-02-10 03:01

    I had the same problem, so I created the following method

     /**
         * 
         * @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);
        }
    
    0 讨论(0)
提交回复
热议问题