- 浏览: 115789 次
- 性别:
- 来自: 上海
最新评论
-
ty709928686:
...
导出db2数据库的表结构和数据 -
suifengJC614:
对于你的第一种解决方案,其实不用那么麻烦,如果对外观有要求的话 ...
jcomboBox显示长项目的内容
JComboBox 向上弹出
写一个东西用到了 JComboBox,缺省情况下下拉框的列表是向下弹出的(否则也不会叫“下拉框”了,呵呵),但现在想要实现让它往上弹出这么一个功能。首先要看的就是 JComboBox 本身是否支持,比如有一个属性可以直接指定让它往下或者往上弹出,很遗憾,没有找到。它弹出其实是一个类似于弹出菜单的一个东西,就想着是不是能在弹出之前设定一下位置,就可以指定在哪里弹出了,跟弹出菜单的原理一样。
首先一个问题是怎么才能知道弹出列表就要弹出呢?运气还不错,JComboBox 里面有 addPopupMenuListener 这个方法,PopupMenuListener 里有 popupMenuWillBecomeVisible() 应该就是在弹出列表显示之前会调用的了。
下一个问题就是怎么才能拿到这个弹出列表的引用,本以为 JComboBox 本身就提供了,没想到竟然没找到,Google 也没找出来,只好自己看代码,从 javax.swing.JComboBox:setPopupVisible() 方法知道,弹出列表通过 UI 来控制的,然后在 javax.swing.plaf.basic.BasicComboBoxUI:installUI() 找到了创建的代码 popup = createPopup();,返回的对象是 BasicComboPopup,是从 JPopupMenu 继承下来的。那怎么才能拿到 popup 的引用呢?在这个类里直接查找“popup”,最后找到了 getAccessibleChild() 这个方法,里面的注释也说明第 0 个子控件就是我们千辛万苦所要寻找的弹出列表了,哈哈。
这下就好办了,加一个监听器,将 popup 的位置往上挪整个控件的高度这么大的距离,就可以达到我们的目的。
结果如图所示:
第 25 行,在弹出列表第一次显示之前,高度其实是不知道的,所以如果直接用 height 的话第一次弹出位置是不对的,第二次才会正确。
错误的结果如图所示:
这样写起来是可以用了,但有几个空方法放着很不爽,继续研究 JComboBox,发现它里面直接支持 firePopupMenuWillBecomeVisible(),这样只要继承 JComboBox,重写 firePopupMenuWillBecomeVisible() 方法,将以上相关代码写进去就可以了。这样看起来清爽一些。代码如下:
写一个东西用到了 JComboBox,缺省情况下下拉框的列表是向下弹出的(否则也不会叫“下拉框”了,呵呵),但现在想要实现让它往上弹出这么一个功能。首先要看的就是 JComboBox 本身是否支持,比如有一个属性可以直接指定让它往下或者往上弹出,很遗憾,没有找到。它弹出其实是一个类似于弹出菜单的一个东西,就想着是不是能在弹出之前设定一下位置,就可以指定在哪里弹出了,跟弹出菜单的原理一样。
首先一个问题是怎么才能知道弹出列表就要弹出呢?运气还不错,JComboBox 里面有 addPopupMenuListener 这个方法,PopupMenuListener 里有 popupMenuWillBecomeVisible() 应该就是在弹出列表显示之前会调用的了。
下一个问题就是怎么才能拿到这个弹出列表的引用,本以为 JComboBox 本身就提供了,没想到竟然没找到,Google 也没找出来,只好自己看代码,从 javax.swing.JComboBox:setPopupVisible() 方法知道,弹出列表通过 UI 来控制的,然后在 javax.swing.plaf.basic.BasicComboBoxUI:installUI() 找到了创建的代码 popup = createPopup();,返回的对象是 BasicComboPopup,是从 JPopupMenu 继承下来的。那怎么才能拿到 popup 的引用呢?在这个类里直接查找“popup”,最后找到了 getAccessibleChild() 这个方法,里面的注释也说明第 0 个子控件就是我们千辛万苦所要寻找的弹出列表了,哈哈。
这下就好办了,加一个监听器,将 popup 的位置往上挪整个控件的高度这么大的距离,就可以达到我们的目的。
PopupComboBox.java import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JComboBox; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import javax.swing.plaf.basic.BasicComboPopup; /** * @author SuperMMX */ class PopupComboBox { public static void main(String[] args) { Object[] values = { "Zhang San", "Li Si", "Wang Wu", "Sun Liu"}; JFrame frame = new JFrame("Pop *UP* JComboBox"); JComboBox comboBox = new JComboBox(values); comboBox.addPopupMenuListener(new PopupMenuListener() { public void popupMenuCanceled(PopupMenuEvent e) { // Don't care } public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { // Don't care } public void popupMenuWillBecomeVisible(PopupMenuEvent e) { JComboBox comboBox = (JComboBox)e.getSource(); BasicComboPopup popup = (BasicComboPopup)comboBox.getUI().getAccessibleChild(comboBox, 0); int height = popup.getHeight(); if (height == 0) { height = popup.getPreferredSize().height; } popup.setLocation(comboBox.getLocationOnScreen().x, comboBox.getLocationOnScreen().y - height); } } ); frame.add(comboBox, BorderLayout.PAGE_END); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(250, 150); frame.setVisible(true); } }
结果如图所示:
第 25 行,在弹出列表第一次显示之前,高度其实是不知道的,所以如果直接用 height 的话第一次弹出位置是不对的,第二次才会正确。
错误的结果如图所示:
这样写起来是可以用了,但有几个空方法放着很不爽,继续研究 JComboBox,发现它里面直接支持 firePopupMenuWillBecomeVisible(),这样只要继承 JComboBox,重写 firePopupMenuWillBecomeVisible() 方法,将以上相关代码写进去就可以了。这样看起来清爽一些。代码如下:
import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JComboBox; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import javax.swing.plaf.basic.BasicComboPopup; /** * @author SuperMMX */ class PopupComboBox extends JComboBox { public PopupComboBox(Object[] values) { super(values); } public static void main(String[] args) { Object[] values = { "Zhang San", "Li Si", "Wang Wu", "Sun Liu"}; JFrame frame = new JFrame("Pop *UP* JComboBox"); JComboBox comboBox = new PopupComboBox(values); frame.add(comboBox, BorderLayout.PAGE_END); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(250, 150); frame.setVisible(true); } public void firePopupMenuWillBecomeVisible() { // Pop *UP* BasicComboPopup popup = (BasicComboPopup)getUI().getAccessibleChild(this, 0); int height = popup.getHeight(); if (height == 0) { height = popup.getPreferredSize().height; } popup.setLocation(getLocationOnScreen().x, getLocationOnScreen().y - height); super.firePopupMenuWillBecomeVisible(); } }
发表评论
文章已被作者锁定,不允许评论。
-
Velocity读取模板文件的方法[转]
2012-10-30 11:04 1707我用的是velocity-1.6.4,官方自带的Example ... -
jdbc-odbc连接dbf (转)
2011-12-21 12:06 4879dbf分两种,一种是Dbase,另一种是Foxpro的 1、 ... -
jar文件数字签名
2010-10-09 11:45 6415给JAR文件数字签名 1、用keytool生成密钥: k ... -
JAVA国际化配置
2010-09-13 11:03 1220国际化(Internationalization,又称il ... -
dom XML操作
2010-09-10 17:56 892一、创建XML文件 public static vo ... -
轻松部署Java Web Start
2010-07-24 23:19 1338Java Web Start(以下简称JWS)是SUN提供 ... -
调整bufferedimage大小
2010-03-09 19:58 2632/** * 调整bufferedim ... -
jcomboBox显示长项目的内容
2010-03-04 11:19 4421如果JComboBox列表中的内容过长的话,下拉框中不全部显示 ... -
JFreeChart中文使用文档
2010-03-01 16:41 1286JFreeChart类: void setAntiAlias ... -
java crash详细分析
2010-01-30 17:02 2892一. 如何得到这个日志 ... -
生成验证图片
2009-10-22 21:08 862private void createImage( ... -
发送邮件
2009-10-22 17:08 1030//发送邮件方法 public stat ... -
树节点状态的保存和加载
2009-10-22 10:46 1241保存树节点状态至数据库表中 this.addWindow ... -
jtable添加行标题
2009-10-15 16:11 5160将表格的第一列作为表头,使用渲染器改变其外观,看起来像表头 ... -
修改树节点
2009-10-14 17:40 1322修改jtree树节点时,需要先注册树节点的编辑事件,然后在编辑 ... -
拖拽表数据实现数据的传输
2009-10-14 17:33 1018将表中一条记录拖拽至树中节点时需在表中监听TransferHa ... -
使用序列化实现对象深拷贝
2009-10-14 17:28 1727实现树节点的深拷贝 public DefaultM ... -
JTable 实用方法
2009-09-03 23:11 13621. 设置指定行的颜色 class TableCo ... -
Double精度的常用设置
2009-08-31 23:54 9057import java.text.DecimalFormat; ... -
设计模式学习之Facade(外观模式)
2009-07-29 14:00 936GOF《设计模式》一 ...
相关推荐
在标题"JComboBox下拉框多选"中提到的场景,就是将`JComboBox`与`JCheckBox`相结合,以实现用户可以从下拉列表中选择多个选项的功能。 以下是一个详细的解释: 1. **JComboBox的基本使用**: `JComboBox`是Java ...
Java 实现下拉列表 JComboBox 中值和显示不同 在 Java 中,实现下拉列表 JComboBox 中值和显示不同是一种常见的需求。下拉列表 JComboBox 是 Java 中的一种 GUI 组件,用于提供用户选择多个选项。通常情况下,我们...
Java Swing JComboBox 下拉列表框的示例代码 Java Swing JComboBox 下拉列表框是一种常用的 GUI 组件,它允许用户从多个选项中选择一个值。下面将详细介绍 JComboBox 的基本概念、常用构造方法、常用方法和示例代码...
在Swing中,多选下拉框通常由JComboBox类实现,但默认的JComboBox只支持单选。为了实现多选功能,我们需要扩展JComboBox或者使用第三方库,如JList或JTable与弹出面板组合。 本主题涉及的知识点主要包括以下几个...
本话题主要探讨如何在`ToolBar`上添加滚动条和下拉框,并实现它们之间的交互关联。 首先,我们需要理解`ToolBar`的基本概念。`ToolBar`通常出现在桌面应用或者网页应用中,它可以是水平布局或垂直布局,包含了一...
本篇文章将深入探讨如何在Java中实现下拉框的监听、将其添加到界面以及处理界面的切换。 首先,Java提供了两种主要的API来创建和操作下拉框:Java Swing和JavaFX。这里我们主要关注Swing,因为它在许多桌面应用开发...
本篇文章将深入探讨Java中JComboBox的事件处理机制,以及如何通过编程实现这些功能。 JComboBox的事件主要分为两类:ActionEvent和ItemEvent。ActionEvent通常发生在用户从下拉列表中选择一个选项并点击确认按钮...
4. 自定义渲染:为了使组件更易于阅读和理解,可以自定义`ListCellRenderer`和`ComboBoxRenderer`,以改变列表和下拉框中项的显示样式,比如添加图标以区分文件类型。 5. 事件处理:添加适当的事件处理器,例如`...
- Java Swing提供了事件监听机制,开发者可以注册监听器到`JComboBox`,在用户做出选择时触发相应事件,如`ItemListener`或`ActionListener`,从而更新其他联动的下拉框。 5. **XML数据存储**: - 标签提到XML...
要实现多选下拉框功能,我们需要自定义组件或者使用第三方库来扩展`JComboBox`的功能。 ### 一、自定义多选下拉框 自定义多选下拉框通常涉及以下几个关键步骤: 1. **创建自定义模型**:你需要创建一个自定义的`...
Java `JComboBox` 是 Swing 组件库中的一个控件,用于在下拉列表中显示一组可选择的选项。它提供了一个简单的用户界面,允许用户从预定义的选项中进行单选。`JComboBox` 在 Java 图形用户界面(GUI)编程中非常常见...
在本示例中,主要通过监听`JComboBox`的选择变化事件,并根据选择结果动态创建新的`JComboBox`来实现级联效果。具体来说,当用户在一个`JComboBox`中做出选择后,程序会触发级联逻辑,创建新的`JComboBox`并将其添加...
this.setTitle("下拉框美化"); this.setSize(800, 600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container container = getContentPane(); container.setLayout(null); String[] strArr...
在Java的Swing库中,实现“点击下拉框自动填充文本框”的功能,涉及到Swing组件的交互、事件监听以及数据绑定的概念。这个功能在许多GUI应用中都非常常见,例如用户选择一个选项后,相应的文本框会自动更新为所选...
通过扩展或自定义`JComboBox`,可以添加显示图像的功能。这通常涉及到创建一个自定义的渲染器,使得每个组合框项在显示时能够同时包含图像和文本。渲染器是一个关键的概念,因为它决定了组件如何在屏幕上呈现数据。 ...
总结,这个实例展示了如何利用Java Swing的`JComboBox`结合`JDBC`技术,动态地从`SQL2000`数据库获取数据并显示在下拉列表中。通过监听用户的选择变化,可以实现灵活的数据交互。这种动态绑定数据的方法在各种需要与...
对于Java桌面应用,可以使用JComboBox控件并自定义其渲染器来实现。你需要创建一个继承自DefaultListCellRenderer的类,重写`getListCellRendererComponent`方法,在其中添加图标展示的逻辑。 4. **前端框架**: ...
总的来说,使用Java Swing 编写日期下拉框控件涉及到导入第三方库、创建组件、设置事件监听以及实现日期比较工具类。这个控件可以广泛应用于数据输入、日程安排等场景,提高用户界面的交互性。在实际项目中,你可能...
总结来说,Swing中的JComboBox可以用来创建下拉框,通过自定义渲染器可以实现图片和用户名的显示,而鼠标事件监听器则可以用来添加鼠标悬浮时的动态效果。在实际开发中,可以根据需求调整和优化这些代码,以满足特定...
JComboBox还提供了一些高级用法,例如可以使用setEditable方法设置是否允许用户编辑选项的文本,使用setMaximumRowCount方法设置最大显示行数等。例如: `comboBox.setEditable(true);` `comboBox....