如前所述,我现在为我的问题提供可行的代码。
**HTML to Run Applet**
<HTML>
<HEAD>
</HEAD>
<BODY>
<div >
<APPLET CODE="Main.class" WIDTH="800" HEIGHT="500">
</APPLET>
</div>
</BODY>
</HTML>
小程序类
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的高度,这样我就能看到所有元素。任何帮助
答案 0 :(得分:2)
Swing中JComboBox下拉列表的高度
如果要在用户单击列表时设置要在JCombobox中显示的项目行数,可以使用JComboBox本身的此方法。
setMaximumRowCount(int count)
答案 1 :(得分:0)
我已经覆盖了BasicComboPopup类并重写了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