csdn太慢啦,搬家至此。。。。
最近学习SWING,改变JComboBox的的显示方式,这里是将JComboBox的下拉框向上显示,以下为详细代码:
package kissJava.JComboBox;

import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.plaf.ComboBoxUI;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicArrowButton;
import javax.swing.plaf.basic.BasicComboBoxUI;
import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.plaf.basic.ComboPopup;


public class PopupComboSample extends JFrame...{

String labels[] = ...{ "Chardonnay", "Sauvignon", "Riesling", "Cabernet",
"Zinfandel", "Merlot", "Pinot Noir", "Sauvignon Blanc",
"Syrah", "Gewurztraminer" };
JComboBox jcb = null;

public PopupComboSample()...{
this.setTitle("下拉框向上");
this.setLayout(null);
jcb = new JComboBox(labels);
//setUI.......
jcb.setUI((ComboBoxUI) MyComboBoxUI.createUI(jcb));
jcb.setBounds(50, 150, 200, 20);
this.add(jcb, null);
setSize(300, 300);
setVisible(true);
}

public static void main(String args[]) ...{
new PopupComboSample();
}


static class MyComboBoxUI extends BasicComboBoxUI ...{
int newsBarTitleWidth = 0;

public static ComponentUI createUI(JComponent c) ...{
return new MyComboBoxUI();
}
//改变箭头的方向

protected JButton createArrowButton() ...{
JButton button = new BasicArrowButton(BasicArrowButton.NORTH);
return button;
}
//改变comboBox的弹出方向

protected ComboPopup createPopup() ...{

BasicComboPopup popup = new BasicComboPopup(comboBox)...{

public void show() ...{
//大小按需要更改
Dimension popupSize = new Dimension(200 - newsBarTitleWidth - 5, 17 * 5);
scroller.setMaximumSize(popupSize);
scroller.setPreferredSize(popupSize);
scroller.setMinimumSize(popupSize);
show(comboBox, newsBarTitleWidth, -17 * 5);//getPopupHeightForRowCount(10));
}
};
popup.getAccessibleContext().setAccessibleParent(comboBox);
return popup;
}
}
}


显示效果为:

不过看图的效果jcb的输入框没有线条显示,看来得再改改,学习中。。。。。。。