`
henry406
  • 浏览: 115788 次
  • 性别: 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;
			}
		});

相关推荐

    java JComboBox的使用

    Java `JComboBox` 是 Swing 组件库中的一个控件,用于在下拉列表中显示一组可选择的选项。它提供了一个简单的用户界面,允许用户从预定义的选项中进行单选。`JComboBox` 在 Java 图形用户界面(GUI)编程中非常常见...

    用JComboBox和JList实现的一个文件浏览器组件

    当用户在`JComboBox`中选择一个文件夹后,`JList`可以实时更新,显示该文件夹中的内容。开发者可能通过监听`JComboBox`的选择事件,动态更新`JList`的模型(`DefaultListModel`),这样用户就可以在`JList`中查看并...

    JComboBox With JCheckBox

    这可以通过`new JCheckBox(String text)`构造函数完成,其中`text`参数是显示在复选框旁边的文本。 2. **构建模型**:接着,你需要构建一个模型来存储这些复选框。你可以使用`DefaultComboBoxModel`类,通过添加`...

    java 利用ComboModel构造JComboBox

    你还可以自定义渲染器和编辑器来改变`JComboBox`的显示和编辑行为。 总的来说,`JComboBox`结合`ComboBoxModel`是Java Swing中创建交互式下拉列表的强大工具。通过理解`ComboBoxModel`的工作原理以及如何与`...

    Jtable JCombobox例子

    在你的项目中,你可能遇到了一个问题:当`JComboBox`未被选中时,其下拉箭头没有正确显示。这个问题通常是由于`JTable`的默认渲染器不支持`JComboBox`导致的。 首先,我们需要理解`JTable`的工作原理。`JTable`中的...

    Multicolumn Jcombobox_DEMO_multicolumncombobox_

    在"Multicolumn JCombobox_DEMO_multicolumncombobox_"这个项目中,我们可能看到一个演示如何创建并使用这种多列组合框的示例。DEMO通常是为了展示特定功能或技术而编写的简化代码,帮助开发者理解并学习如何实现。...

    java swing 多选下拉框 支持动态加载数据

    5. **Listener**:为了响应用户的操作,如打开下拉框或选择项目,我们需要添加监听器,如ActionListener或ItemListener。这些监听器可以捕捉事件并触发相应的操作,如从数据库或网络加载新数据。 6. **User ...

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

    本文将详细介绍使用 JDBC 连接数据库,实现用户登录、用户注册、JComboBox 中显示数据库中的记录和 JTable 显示数据库中的记录的方法。 JDBC 简介 JDBC(Java Database Connectivity)是 Java 语言中用来连接...

    Java下拉式菜单实现

    4. **模型定制**:通过继承`DefaultComboBoxModel`并实现自己的`MyModel`类,可以更灵活地控制`JComboBox`的内容和行为。 5. **初始化窗口**:设置窗口标题、大小和可见性等属性,确保窗口能够正常显示。 #### 五、...

    JAVA三级联动实例

    - 当用户在 `jComboBox1` 中选择了一个项目时,`jComboBox2` 的内容会被清空,并重新填充为当前选中的项目加上 "A" 或 "B"。 - 默认情况下,`jComboBox2` 会选择第一个添加的项目。 - **`jComboBox2` 的事件处理...

    酒店管理系统(javaSwing)的一个小项目

    为了更好地理解项目,我们需要解压这个文件,查看源代码结构和文件内容。一般来说,这样的系统会包含以下部分: 1. **主界面**:通常由一个Java Swing的JFrame或JDialog构成,展示登录界面或者主菜单。 2. **数据库...

    建立一个班级下拉式列表,列表项中有2004(1)班,2004(2)班,2004(3)班和2004(4)班。当点击某个选项时,将其成绩单显示在文本区中。

    在这个项目中,我们将使用Java和NetBeans IDE来创建一个简单的应用程序,它包含一个下拉式选择列表,用于显示四个不同的班级(2004(1)班,2004(2)班,2004(3)班,2004(4)班),并根据用户的选择在文本区域中显示对应...

    java管理系统项目总结.doc

    在项目中,每个功能的实现都是相似的,都是通过点击叶子节点的人员调用后,调用了相应的实现类,右面板显示相应的人员调用面板,包括JLabel、Jtable、TextField、JComboBox等控件。 三、修改篇 在项目中,需要对...

    java swing开发项目管理系统1.0

    在项目管理系统中,可能用到了JFrame作为主窗口,用JTabbedPane实现多标签页功能,用JTable展示项目的任务列表和进度,以及用JComboBox或JList来选择和分配项目成员。 Swing支持事件监听机制,使得用户与界面的交互...

    Java_Swing_项目使用.doc

    5. **JComboBox**:下拉列表提供了可选择的选项列表。你可以通过`addItem(Object item)`添加选项,`setEditable(boolean editable)`设置是否可以自定义输入。命名时,通常以`cbo_`开头。 6. **JPasswordField**:...

    下拉多选计算和

    JComboBox是一个允许用户从一组预定义选项中选择一个或多个项目的控件。在这个场景中,我们需要实现的是一个多选功能的JComboBox,并且能够实时计算选中项的值之和。 首先,让我们深入了解一下JComboBox。JComboBox...

    Java Swing项目

    项目的源代码可能包含了对Swing组件的实例化、布局设置、事件处理和外观配置等内容,这些都是学习和理解Swing编程的重要实践案例。 总的来说,Java Swing是Java GUI开发的强大工具,通过熟练掌握Swing,开发者可以...

    画图板Java实践项目

    9. **设计模式**:可能涉及到MVC(模型-视图-控制器)设计模式,将界面显示、用户交互和数据处理分离,使得代码更易于维护和扩展。 10. **版本控制**:项目可能使用Git进行版本控制,了解如何使用git commit, git ...

    java swing程序 实现点击图片列表 改变图片

    - 图片缩略图:在`JComboBox`中显示图片的缩略图,以便用户能更直观地知道所选图片的内容。 以上就是关于"java swing程序实现点击图片列表改变图片"的核心知识讲解,通过理解和应用这些知识点,开发者可以创建出...

    Java项目开源源码之GUI学生信息管理系统

    这样,根据用户的选择,程序可以显示不同的语言版本。 7. **单元测试与集成测试** 开源项目通常会包含测试代码,使用JUnit或其他测试框架进行单元测试和集成测试,以验证各个功能模块的正确性。这有助于保证代码...

Global site tag (gtag.js) - Google Analytics