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 悬浮提示框_表格(悬浮框提示)相关推荐

  1. ios 系统提示框_经验分享:新购买移动硬盘格式化为Windows系统和Mac系统同时可以使用的方法...

    经常使用硬盘的小伙伴们都知道,新买的移动硬盘,要想在Windows系统使用的话是可以直接使用的,因为一般情况下新买的移动硬盘格式是适用于Windows系统的NTFS格式:如果想让该移动硬盘也能在苹果的 ...

  2. 登录系统 提示框_实物资产管理软件操作手册(职员和系统用户)

    一.职员和系统用户 "职员和系统用户"菜单提供了对公司人员信息进行维护的功能,可以自定义职员编码. 姓名.用户名等相关职员信息. 注意:职员编码.用户名需唯一,且用户名一旦保存则不 ...

  3. ios 系统提示框_二个消息:关于iOS12.2和iOS13 beta 1系统功能

    今天分享最新三条消息: 1.iOS12.2 取消低电量提示声 2.iOS13 beta 1 曝光新功能 一.iOS12.2 取消低电量提示声 国行版设备 iOS12.2 取消低电量提示声,在此之前旧版 ...

  4. 小程序提示框_废品之家小程序招财点的介绍和使用

    那到底什么是招财点呢? 其实很好理解,招财点就是在废品之家小程序上面用金钱兑换使用的虚拟货币(招财点),您可以使用招财点在小程序上面查看任何的价格行情信息,招标货源,以及发布供求等等信息服务,一站式到 ...

  5. 小程序提示框_科汛网校V6小程序增加绑定账号功能

    从移动互联网开始盛行的时候,APP频出,但是最让人尴尬的就是登陆,app用多了,账号密码就越多,记忆起来很费事.小编经常处在错乱中,有时候明明知道注册过,却想不起帐号密码,只能重新注册,简直是大写的忧 ...

  6. android 带箭头提示框,三种带箭头提示框总结实例

    无论是提示框还是导航栏都能看到如上图所示的带有箭头的框框,这种箭头可以通过背景图片或者是css来实现,本文介绍三种通过css实现带箭头的提示框. 1.通过border属性 思路:两个三角形,通过定位使 ...

  7. Unity调用Window提示框Yes/No(英文提示窗)

    Unity调用Windows弹提示框 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar - ...

  8. html5 气泡文字提示框,css实现气泡文字提示框代码教程

    css气泡文字提示框 实现的等腰直角三角形式的对话框 效果如下: 代码如下: css: .arrow span{border-color:#0FF #000 #f00 #ff0 ; top:0px;} ...

  9. html提示框title更改,设置title提示框的样式

    默认的title不能设置样式,通过js和css实现title的功能 css样式: /*修改提示框*/ #mytitle { position: absolute; color: #ffffff; ma ...

最新文章

  1. 2021高考成绩各科各题得分查询,2021年新疆高考分数一分一段位次表,新疆高考个人成绩排名查询方法...
  2. 一些查阅个人隐私信息的网站——国内的基本上都查不到
  3. 定时器工作原理及初值快速计算
  4. Java:内部类之成员内部类,内部类之匿名内部类
  5. R语言应用实战-聚类分析以及k-means的优缺点
  6. java 读取svg元素_svg动态添加元素
  7. Android LBS系列05 位置策略(一)
  8. OpenShift 4 之通过Dockerfile部署容器应用
  9. BitMap 的基本原理和实现
  10. 人工智能目标检测模型(四)——ResNet
  11. 分布式事务之基础理论(CAP/BASE理论)篇
  12. matlab怎么学机器人算法,机器人学、机器视觉与控制——MATLAB算法基础
  13. 嵌入式软件架构设计(转载)
  14. crystalReportViewer+ReceiveCrystalReport.rpt+DataSet.xsd做报表 转
  15. kaggle房价预测
  16. 微信:item_search_seller - 搜索公众号列表
  17. 如何搭建一个网站 -- 搭建一个网站需要多少钱
  18. python简单笔试题_python编程简单笔试题
  19. 海信智能电视可以升级鸿蒙系统吗,都是55寸新品,荣耀智慧屏、小米电视和海信电视,你会咋选?...
  20. image-compressors前端图片压缩工具

热门文章

  1. 逆波兰表达式[栈 C 语言 实现]
  2. mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志
  3. day 34 守护线程守护进程 互斥锁线程 信号量 生产者消费者
  4. Confluent Platform 3.0支持使用Kafka Streams实现实时的数据处理(最新版已经是3.1了,支持kafka0.10了)...
  5. 移动端中如何检测设备方向的变化?
  6. 【BZOJ-2435】道路修建 (树形DP?)DFS
  7. char、varchar、nchar、nvarchar的区别
  8. Photoshop Blendmodi in GLSL
  9. 遇到异常:这可能是由某个扩展导致的
  10. leveldb中为什么L 0层中每个sst文件中key的范围都是有重叠的?