BasicComboPopup 中下拉菜单的高度

height of dropdown in BasicComboPopup

如前所述,我现在正在为我的问题提供可行的代码。

**HTML to Run Applet**
<HTML>
<HEAD>
</HEAD>
<BODY>
<div >
<APPLET CODE="Main.class" WIDTH="800" HEIGHT="500">
</APPLET>
</div>
</BODY>
</HTML>

小程序Class

public class Main extends Applet{
   public void init(){
       JComboBoxUI c = new JComboBoxUI();
       c.addItem("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
       c.addItem("B");
c.addItem("C");
c.addItem("D");
c.addItem("E");
c.addItem("F");
c.addItem("G");
c.addItem("H");    
c.addItem("I");
c.addItem("J");
c.addItem("K");
c.addItem("L");
c.setName("Combo Box");
c.setSelectedItem("D");
       c.setMaximumRowCount(20);
       c.setPreferredSize(new Dimension(150,20));
     add(c);
   }
}

MetalComboBox - 覆盖 BasicComboPopUp

public class JComboBoxUI extends JComboBox{

     public void updateUI() {
          setUI(new CustomComboBoxUI());
       }

       public void addPopupMenuListener(PopupMenuListener l) {
           CustomComboBoxUI ui = (CustomComboBoxUI)getUI();
          ui.addPopupMenuListener(l);
       }


    public class CustomComboBoxUI extends MetalComboBoxUI {
           protected JPopupMenu _popup;
            protected ComboPopup createPopup() {
                 BasicComboPopup popup = new BasicComboPopup(comboBox) {
                    public JScrollPane createScroller() {
                        JScrollPane j = new JScrollPane( list, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
                              ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
                        return j;
                     }
                 };         
                 _popup = (JPopupMenu)popup;
                 return popup;
              }
           @Override 
           protected void installListeners() {
               super.installListeners();
           }

           public void addPopupMenuListener(PopupMenuListener l) {
              if (_popup != null)
                 _popup.addPopupMenuListener(l);
           }
        }
}

问题

如果你运行这样做,你会看到垂直滚动条没有出现(如在 JScrollPane 中设置的那样)并且一些元素没有显示。我想增加 Popup 的高度,以便可以看到所有元素。任何帮助

height of dropdown in JComboBox in swings

如果您想设置当用户单击列表时在 JCombobox 中显示的项目行数,您可以从 JComboBox 本身使用此方法。

setMaximumRowCount(int count) 

我已经覆盖了 BasicComboPopup class 并覆盖了 getPopupHeightForRowCount(int maxRowCount) 方法以包含水平滚动条的高度。

 public class OverrideComboPopup extends BasicComboPopup {

    private JScrollPane sPane;
    public KronosComboPopup(KronosComboBox combo) {
        super(combo);
        setBackground(GUIResources.POPUP_MENU_BACKGROUND);
    }

 public JScrollPane createScroller() {
        sPane = new JScrollPane( list, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                      ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        return sPane;
     }

     //Overrides the getPopupHeightForRowCount to include the height of horizontal bar.
     protected int getPopupHeightForRowCount(int maxRowCount) {
        int currentElementCount = comboBox.getModel().getSize();
        int rowCount = Math.min( maxRowCount, currentElementCount );
        if (rowCount==0) return rowCount;
        int ht = super.getPopupHeightForRowCount(maxRowCount);
        double cWidth = comboBox.getSize().getWidth();
        double vWidth = list.getPreferredScrollableViewportSize().getWidth();
        if (vWidth>cWidth) {
           int barHt = sPane.getHorizontalScrollBar().getHeight();
           //Sets the default height of scroll bar
           if (barHt==0) barHt = 16;
           ht = ht + barHt;
        }
        return ht;
     }


    }

如果您有任何问题,请告诉我,请通过 chauhanvineesh@gmail.com

与我联系