java 悬浮提示框_表格(悬浮框提示)
JTable的ToolTip提示和其它的组件提示是一样的,因为它们都是继承于Jcomponent,当我们需要为我们的单元格实现ToolTip的时候,只需要复写它的getToolTipText方法就可以了,
看看Sun官方的例子:
//Implement table cell tool tips.
@Override
publicString getToolTipText(MouseEvent
e) {
取得鼠标的行和列:
java.awt.Point p = e.getPoint();
introwIndex = rowAtPoint(p);
intcolIndex = columnAtPoint(p);
intealColumnIndex = convertColumnIndexToModel(colIndex);
设置你需要显示的ToolTip,然后返回
tip = ……;
returntip;
同样的JTableHeader也是如此:
protectedJTableHeader
createDefaultTableHeader() {
returnnewJTableHeader(columnModel){
@Override
publicString
getToolTipText(MouseEvent e) {
这样不用其它设置,JTable的基本ToolTip就实现了,它虽然比较简单,但是最大的好处是不用自己考虑定位和显示的问题,很多时候也就可以了.
关于JTable的简单ToolTip提示就算是完成了,当我们只是简单的提示的时候,只需要复写JTable的getToolTipText和setToolTipText方法就可以了,上个例子就是这样;但是当我们需要使我们的ToolTip提示不像Sun提供的那么单调,我们就需要自己来实现了.
这时候的重点已经不在JTable上了,而在于ToolTip上面,我们可以把我们需要呈现的ToolTip实现为一个JPanel,这样就可以在它的上面放置各种组件了,设置放图标都可以,这个时候就需要实现这个ToolTip的UI和Manager,这方面有很多开源的实现,以后有时间的话开个专题专门来介绍ToolTip的,这里不写了.
对于已经实现好的我们自己的ToolTip,我们需要做的是把它注册到我们的JTable上面,再根据鼠标的位置显示它,如下图所示,它可以有Title,可以有图片,可以有正文,甚至可以再加别的组件.如下图所示:
我们需要的是增加监听:
addMouseListener(this)
根据监听的状态处理ToolTip:
@Override
publicvoidmouseExited(MouseEvent event) {
隐藏
@Override
publicvoidmousePressed(MouseEvent event) {
显示
@Override
publicvoidmouseMoved(MouseEvent event) {
判断状态,显示或者隐藏.
然后是判断位置:
// display
directly below or above JTable band
location.x= screenLocation.x;
location.y= screenLocation.y+
mouseEvent.getY() + 22;
location.x= screenLocation.x+mouseEvent.getX();
f((location.y+ size.height) > (sBounds.y+ sBounds.height)) {
location.y= screenLocation.y- size.height;
最后是取得鼠标所在单元格的值传入显示:
Point p = mouseEvent.getPoint();
introw =
rowAtPoint(p);
intcol =
columnAtPoint(p);
if(row == -1
|| col == -1) {
returnnull;
}
Object data = getValueAt(row, col);
当然此时你可以对data做变换,从而显示需要的值.
使用很简单,注册就可以了.
setActionRichTooltip(newRichTooltip());
然后是另外一种ToolTip的效果,这个是一个开源的实现,只抓张图看看就算了,和前面的实现基本类似,还比那个简单,也是UI,Timer以及位置计算.如下图,代码在open就有:
ToolTip到这儿就算完了,但是实际使用中可能有这个问题,如下图:
这是因为我们经过设置Renderer渲染的单元格显示值和实际值不一样了.但我们很多时候需要看到的其实不是它的真实值,而是渲染后的值,可以通过渲染的实现类把它取回来:
先取得渲染类:
TableCellRenderer cellRenderer = table.getColumnModel().getColumn(column).getCellRenderer();
再去的渲染的控件:
Component component =
cellRenderer.getTableCellRendererComponent(table,
table.getValueAt(row, column),false,false, row, column);
这个时候不知道这个控件是否有getText方法,通过反射判断,没有则设置为””
String text ="";
if(component
!=null) {
for(Method
method : component.getClass().getMethods()) {
if(method.getName().equals("getText")) {
text =
method.invoke(component).toString();
}
}
}
最后效果如图:
到此为止,所有关于JTable的ToolTip提示就完成了,当然我实现的都是一些基本的效果,比较复杂的效果,则需要你自己去绘制和实现ToolTip了,说句简单的,技术完成了,以后就是玩色彩和审美了,做程序也就这样了,很多时候后者重要.
java 悬浮提示框_表格(悬浮框提示)相关推荐
- ios 系统提示框_经验分享:新购买移动硬盘格式化为Windows系统和Mac系统同时可以使用的方法...
经常使用硬盘的小伙伴们都知道,新买的移动硬盘,要想在Windows系统使用的话是可以直接使用的,因为一般情况下新买的移动硬盘格式是适用于Windows系统的NTFS格式:如果想让该移动硬盘也能在苹果的 ...
- 登录系统 提示框_实物资产管理软件操作手册(职员和系统用户)
一.职员和系统用户 "职员和系统用户"菜单提供了对公司人员信息进行维护的功能,可以自定义职员编码. 姓名.用户名等相关职员信息. 注意:职员编码.用户名需唯一,且用户名一旦保存则不 ...
- ios 系统提示框_二个消息:关于iOS12.2和iOS13 beta 1系统功能
今天分享最新三条消息: 1.iOS12.2 取消低电量提示声 2.iOS13 beta 1 曝光新功能 一.iOS12.2 取消低电量提示声 国行版设备 iOS12.2 取消低电量提示声,在此之前旧版 ...
- 小程序提示框_废品之家小程序招财点的介绍和使用
那到底什么是招财点呢? 其实很好理解,招财点就是在废品之家小程序上面用金钱兑换使用的虚拟货币(招财点),您可以使用招财点在小程序上面查看任何的价格行情信息,招标货源,以及发布供求等等信息服务,一站式到 ...
- 小程序提示框_科汛网校V6小程序增加绑定账号功能
从移动互联网开始盛行的时候,APP频出,但是最让人尴尬的就是登陆,app用多了,账号密码就越多,记忆起来很费事.小编经常处在错乱中,有时候明明知道注册过,却想不起帐号密码,只能重新注册,简直是大写的忧 ...
- android 带箭头提示框,三种带箭头提示框总结实例
无论是提示框还是导航栏都能看到如上图所示的带有箭头的框框,这种箭头可以通过背景图片或者是css来实现,本文介绍三种通过css实现带箭头的提示框. 1.通过border属性 思路:两个三角形,通过定位使 ...
- Unity调用Window提示框Yes/No(英文提示窗)
Unity调用Windows弹提示框 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar - ...
- html5 气泡文字提示框,css实现气泡文字提示框代码教程
css气泡文字提示框 实现的等腰直角三角形式的对话框 效果如下: 代码如下: css: .arrow span{border-color:#0FF #000 #f00 #ff0 ; top:0px;} ...
- html提示框title更改,设置title提示框的样式
默认的title不能设置样式,通过js和css实现title的功能 css样式: /*修改提示框*/ #mytitle { position: absolute; color: #ffffff; ma ...
最新文章
- 2021高考成绩各科各题得分查询,2021年新疆高考分数一分一段位次表,新疆高考个人成绩排名查询方法...
- 一些查阅个人隐私信息的网站——国内的基本上都查不到
- 定时器工作原理及初值快速计算
- Java:内部类之成员内部类,内部类之匿名内部类
- R语言应用实战-聚类分析以及k-means的优缺点
- java 读取svg元素_svg动态添加元素
- Android LBS系列05 位置策略(一)
- OpenShift 4 之通过Dockerfile部署容器应用
- BitMap 的基本原理和实现
- 人工智能目标检测模型(四)——ResNet
- 分布式事务之基础理论(CAP/BASE理论)篇
- matlab怎么学机器人算法,机器人学、机器视觉与控制——MATLAB算法基础
- 嵌入式软件架构设计(转载)
- crystalReportViewer+ReceiveCrystalReport.rpt+DataSet.xsd做报表 转
- kaggle房价预测
- 微信:item_search_seller - 搜索公众号列表
- 如何搭建一个网站 -- 搭建一个网站需要多少钱
- python简单笔试题_python编程简单笔试题
- 海信智能电视可以升级鸿蒙系统吗,都是55寸新品,荣耀智慧屏、小米电视和海信电视,你会咋选?...
- image-compressors前端图片压缩工具
热门文章
- 逆波兰表达式[栈 C 语言 实现]
- mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志
- day 34 守护线程守护进程 互斥锁线程 信号量 生产者消费者
- Confluent Platform 3.0支持使用Kafka Streams实现实时的数据处理(最新版已经是3.1了,支持kafka0.10了)...
- 移动端中如何检测设备方向的变化?
- 【BZOJ-2435】道路修建 (树形DP?)DFS
- char、varchar、nchar、nvarchar的区别
- Photoshop Blendmodi in GLSL
- 遇到异常:这可能是由某个扩展导致的
- leveldb中为什么L 0层中每个sst文件中key的范围都是有重叠的?