博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jcomboBox显示长项目的内容
阅读量:5152 次
发布时间:2019-06-13

本文共 4199 字,大约阅读时间需要 13 分钟。

如果JComboBox列表中的内容过长的话,下拉框中不全部显示 

解决方法一:当鼠标放在这个过长的项目中时显示tooltip,提示用户选择这项的全部信息 
setComboBoxUI(combobox); 

private void setComboBoxUI(final JComboBox combobox) {
combobox.setUI(new WindowsComboBoxUI() {
protected ComboPopup createPopup() {
return new BasicComboPopup(combobox) {
protected JList createList() {
return new JList(comboBox.getModel()) {
public void processMouseEvent(MouseEvent e) {
if (e.isControlDown()) {
e = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), e.getModifiers() ^ InputEvent.CTRL_MASK, e.getX(), e.getY(), e.getClickCount(), e.isPopupTrigger()); } super.processMouseEvent(e); } public String getToolTipText(MouseEvent event) {
int index = locationToIndex(event.getPoint()); if (index != -1) {
Object value = getModel().getElementAt(index); ListCellRenderer renderer = getCellRenderer(); Component rendererComp = renderer.getListCellRendererComponent(this, value, index, true, false); if (rendererComp.getPreferredSize().width > getVisibleRect().width) {
return value == null ? null : value.toString(); } else {
return null; } } return null; } public Point getToolTipLocation(MouseEvent event) {
int index = locationToIndex(event.getPoint()); if (index != -1) {
Rectangle cellBounds = getCellBounds(index, index); return new Point(cellBounds.x, cellBounds.y); } return null; } }; } }; } }); } 解决方法二:获取最大长项目宽度,并设置为弹出下拉框时的宽度  combobox.setUI(new LargerComboBoxUI()); 
class LargerComboBoxUI extends BasicComboBoxUI {
protected ComboPopup createPopup() {
return new LargerComboPopup(comboBox); } public class LargerComboPopup extends BasicComboPopup {
public LargerComboPopup(JComboBox comboBox) {
super(comboBox); } public void show() {
int selectedIndex = comboBox.getSelectedIndex(); if (selectedIndex == -1) {
list.clearSelection(); } else {
list.setSelectedIndex(selectedIndex); list.ensureIndexIsVisible(selectedIndex); } Insets insets = getInsets(); Dimension listDim = list.getPreferredSize(); boolean hasScrollBar = scroller.getViewport().getViewSize().height != listDim.height; if (hasScrollBar) {
JScrollBar scrollBar = scroller.getVerticalScrollBar(); listDim.width += scrollBar.getPreferredSize().getWidth(); } int width = Math.max(listDim.width, comboBox.getWidth() - (insets.right + insets.left)); int height = getPopupHeightForRowCount(comboBox.getMaximumRowCount()); Rectangle popupBounds = computePopupBounds(0, comboBox.getHeight(), width, height); Dimension scrollSize = popupBounds.getSize(); scroller.setMaximumSize(scrollSize); scroller.setPreferredSize(scrollSize); scroller.setMinimumSize(scrollSize); list.revalidate(); show(comboBox, popupBounds.x, popupBounds.y); } } } 来源:https://www.cnblogs.com/tiankafei/p/10340541.html

转载于:https://www.cnblogs.com/tiankafei/p/10340541.html

你可能感兴趣的文章
解决 Ubutnu16.04 + opencv4.1 源码编译错误 Makefile:160: recipe for target 'all' failed
查看>>
python矩阵
查看>>
【转】ASCII码表在线查询
查看>>
vim插件
查看>>
【转】TestFlight APP测试(IOS如何让上架前给其他人测试)
查看>>
websocket --工作原理
查看>>
xampp安装及配置
查看>>
C++中四种类型转换方式
查看>>
推荐一些国内的Jquery CDN免费服务
查看>>
【outPut_Class 输出类】使用说明
查看>>
单独使用CKfinder上传图片
查看>>
动态网站爬取实例
查看>>
POJ 2406
查看>>
tableView的性能优化
查看>>
Mysqle 常用 函数
查看>>
微信小程序 POST传值跳坑
查看>>
私有IP地址共有三个范围段
查看>>
Zebra - zebra command to get printer status
查看>>
MVVM下listbox默认显示最后一行
查看>>
Spring Boot -01- 快速入门篇(图文教程)
查看>>