`
henry406
  • 浏览: 114228 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jcomboBox显示长项目的内容

    博客分类:
  • java
UI 
阅读更多
如果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);
            }
        }
    }
分享到:
评论
1 楼 suifengJC614 2010-08-11  
对于你的第一种解决方案,其实不用那么麻烦,如果对外观有要求的话,还要根据不同的创建不同的UI,其实写个代理类就可以实现,下面是我对于该解决方案的实现办法。
JComboBox 有两个方法是用来设置和获取渲染器的。分别是
//获取
public ListCellRenderer getRenderer();
//设置渲染器
public void setRenderer(ListCellRenderer aRenderer);

根据这两个方法写代理类就行,下面是我写的代码:
		JComboBox fontlist = new JComboBox();
		fontlist.setRenderer(new ListCellRenderer() {

			private ListCellRenderer renderer = fontlist.getRenderer();

			@Override
			public Component getListCellRendererComponent(JList list,
					Object value, int index, boolean isSelected,
					boolean cellHasFocus) {
				
				Component component = renderer.getListCellRendererComponent(
						list, value, index, isSelected, cellHasFocus);
				System.out.println(component.getClass());
				if (component instanceof JLabel) {
					JLabel label = (JLabel) component;
					label.setToolTipText(label.getText());
				}
				return component;
			}
		});

相关推荐

    Jtable JCombobox例子

    很久没用JAVA了,现在项目上需要在jtable里用jcombobox做显示,自己写了一些但是没有选择的时候没有下拉按钮,这个例子纠正了这个问题

    JDBC 用户登录\用户注册\JTable 显示数据库中的记录

    使用JDBC连接数据库并进行数据表增删改查 使用JDBC 实现用户登录 使用JDBC 实现用户注册 JComboBox 中显示数据库中的记录 用JTable 显示数据库中的记录

    javaswing项目源码-Java-Graphical-User-Interface-Swing-Tutorial-Netbeans-IDE

    Jcombobox Jradiobutton Jcheckbox(Netbeans-GUI) GUI-将选定的行值从JTable显示到JTextfields | 单选按钮| 复选框| 组合框 浏览图像文件并使用Java Swing在Jlabel上显示它 如何从计算机显示图像并将图像插入到...

    java swing+jdbc+mysql 客户信息管理系统

    该项目中包含功能点(java导出excel文件、jcombobox省市区三级联动、jdbc中java反射的应用、swing组件用户登录,显示数据、jdbc操作mysql数据库),有对应jar包,对应sql文件。

    java范例开发大全源代码

     实例124 显示文件中的内容 173  实例125 将数据保存到指定的文件中 175  实例126 将由键盘中录入的信息保存到文件中 176  实例127 一个文件变成多个小文件 178  实例128 多个小文件合成一个文件 181 ...

    图形用户界面与事件处理机制源文件.rar

    1.编写Application程序,在Frame中加入2个按钮(Button)和1个标签(Label),单击两个按钮,...4.在Application中加入1个滚 动列表框List、1个下拉列表框ComboBox和1个按钮,点击按钮将List中的项目移到ComboBox组件中。

    Java:2015年项目

    in static - initComptesPerso() 对于 JComboBox 视图: - fenetreVirement 显示几乎清晰重做 Creationaccounts(重命名为 addAccount) 必须将帐户添加到列表(jcombobox) 必须添加到收款人账户文件中3 月 16 日...

    Swing toolkit X access table of database-开源

    该项目提供以可视方式工作的 J2SE Java Beans,以实现应用程序连接到数据库以在屏幕上显示其数据并对其进行操作的软件。 通过这种方式,这些 J2SE Java Bean 与数据库一起完成了类似于 JButton、JComboBox 和其他 ...

    Java范例开发大全 (源程序)

     实例124 显示文件中的内容 173  实例125 将数据保存到指定的文件中 175  实例126 将由键盘中录入的信息保存到文件中 176  实例127 一个文件变成多个小文件 178  实例128 多个小文件合成一个文件 181  ...

    java范例开发大全(pdf&源码)

    实例124 显示文件中的内容 173 实例125 将数据保存到指定的文件中 175 实例126 将由键盘中录入的信息保存到文件中 176 实例127 一个文件变成多个小文件 178 实例128 多个小文件合成一个文件 181 实例129 统计指定...

    java范例开发大全

    实例124 显示文件中的内容 173 实例125 将数据保存到指定的文件中 175 实例126 将由键盘中录入的信息保存到文件中 176 实例127 一个文件变成多个小文件 178 实例128 多个小文件合成一个文件 181 实例129 统计指定...

    Java范例开发大全(全书源程序)

    实例124 显示文件中的内容 173 实例125 将数据保存到指定的文件中 175 实例126 将由键盘中录入的信息保存到文件中 176 实例127 一个文件变成多个小文件 178 实例128 多个小文件合成一个文件 181 实例129 统计...

    OpenSwing开发包及源码

    解压后是一个JBUILDER项目的目录结构,里面有一个test.bat文件和OpenSwing.jar(主库文件)/OpenSwingBeanInfo.jar(可视开发支持文件),直接执行test.bat进行测试。 <br>■ OpenSwing的发布: 只需要将...

    OpenSwing---Java 常用控件集合

    解压后是一个JBUILDER项目的目录结构,里面有一个test.bat文件和OpenSwing.jar(主库文件)/OpenSwingBeanInfo.jar(可视开发支持文件),直接执行test.bat进行测试。 ■ OpenSwing的发布: 只需要将OpenSwing.jar(主库...

    Java开发技术大全 电子版

    7.2.6显示文件内容241 7.2.7文件的复制243 7.2.8顺序输入流244 7.2.9管道输入输出流246 7.2.10过滤输入输出流248 7.3Reader和Writer类使用249 7.3.1InputStreamReader类中的方法249 7.3.2OutputStreamWriter...

    疯狂JAVA讲义

    学生提问:图11.15和图11.16显示的所有按钮都紧挨在一起,如果希望像FlowLayout、GridLayout等布局管理器指定组件的间距该怎么办? 397 11.4 AWT 常用组件 398 11.4.1 基本组件 398 11.4.2 对话框 400 11.5 事件...

Global site tag (gtag.js) - Google Analytics