java 悬浮提示框_表格(悬浮框提示)

JTable的ToolTip提示和其它的组件提示是一样的,因为它们都是继承于Jcomponent,当我们需要为我们的单元格实现ToolTip的时候,只需要复写它的getToolTipText方法就可以了,

看看Sun官方的例子:

e50a28542056329669b8f3b81fb9cb69.png

//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,可以有图片,可以有正文,甚至可以再加别的组件.如下图所示:

f91d44718fc084e7ccb7bcffa2bad3d7.png

我们需要的是增加监听:

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就有:

2ab5a0928cafcd04ed940fe9cadb9931.png

ToolTip到这儿就算完了,但是实际使用中可能有这个问题,如下图:

9b1d3b2f86e0170bfe66716a4872e72e.png

这是因为我们经过设置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();

}

}

}

最后效果如图:

c914d87a91b185c4bf06fcf4d495f841.png

到此为止,所有关于JTable的ToolTip提示就完成了,当然我实现的都是一些基本的效果,比较复杂的效果,则需要你自己去绘制和实现ToolTip了,说句简单的,技术完成了,以后就是玩色彩和审美了,做程序也就这样了,很多时候后者重要.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux远程工具_【linux实操3.1】linux远程连接工具Secure的使用

把自己的闲置笔记本用来做centos7服务器了,同时也出一期教程,记录自己同时也帮助需要的人;安排如下1、【linux实操1】华硕笔记本安装centos7实战2、【linux实操2】使用yum在命令行安装常用工具3、【linux实操3】安装漂亮的桌面xfce桌面**记录…

IOS--UIAlertView的使用方法详细

IOS--UIAlertView的使用方法详细 // UIAlertView的常用方法 // 标准样式 UIAlertView *oneAlertView [[UIAlertView alloc] initWithTitle:"标题"message:"提示内容" delegate:self cancelButtonTitle:"关闭"otherButtonTitles:"OK"…

afreecatv 回放下载_行车记录仪怎么看回放?行车记录仪停车后能自动录像吗

点击上面蓝色字↑↑↑即可免费订阅!请喜欢的朋友请转发和分享,让更多朋友看到汽车知识天天学 (微信号:qiche92 )  行车记录仪最关键的一个部件,它就是储存零件——TF卡(内存卡)。在购买行车记录仪时,TF卡并不是标配&…

linux导出mysql下ssl证书_Linux系统下生成证书 https证书

平时都是用oneinstack加密https现在因为本地调试 需要https就找到这篇文章Linux系统下生成证书生成秘钥key,运行:$ openssl genrsa -des3 -out server.key 20481会有两次要求输入密码,输入同一个即可输入密码然后你就获得了一个server.key文件.以后使用此文件(通过openssl提供的…

lstm原始论文_有序的神经元——ON-LSTM模型浅析

尽管最近出现的Transformer系列的模型在nlp领域内很流行,但RNN仍然有着重要的地位。本文介绍的模型来自于ICLR 2019的最佳论文之一,它针对自然语言具有语法分层的特点,对原有的LSTM模型的结构做出了改进,使得新模型不仅具有更好的…

malloc函数详解

一、原型&#xff1a;extern void *malloc(unsigned int num_bytes); 头文件&#xff1a;#include <malloc.h> 或 #include <alloc.h> (注意&#xff1a;alloc.h 与 malloc.h 的内容是完全一致的。) 功能&#xff1a;分配长度为num_bytes字节的内存块 说明&#xf…

c++ 航空管理系统_浅谈航站楼能源管理系统的设计与应用

蒋超萍江苏安科瑞电器制造有限公司 江苏江阴 214400 【摘要】根据航站楼的特点&#xff0c;从航站楼能源消耗现状、能源管理系统的功能、系统架构、子系统以及能源的优化调度方案五个方面介绍了航站楼能源管理系统的设计&#xff0c;并对节能效果进行了预测。关键词&#xff1a…

mysql 线性表_线性表之顺序存储,基本操作

/*九大基本操作(不同的存储结构实现的代码不同)此处用一维数组的动态分配&#xff1a;InitList(&L);//初始化表&#xff0c;Length(L);LocateElem(L,e);GetElem(L,i);ListInsert(&L,i,e);ListDelete(&L,i,&e);PrintList(L);Empty(L);DestoryList(&L);*//*静…

mac python安装太慢_【已解决】Mac中给pip3添加代理以提升下载python包的速度

折腾&#xff1a;【未解决】Mac中Python 3.7安装TensorFlow期间&#xff0c;用&#xff1a;pip3 install tensorflow期间会去从下载python包此处连接files.pythonhosted.org的速度很慢。而自己有代理可用。所以想办法去给pip3或pip用上代理&#xff0c;加速下载mac pip3 use pr…

集合数据源

集合数据源主要包括ArrayList,Hashtabel,DataView,DataReader转载于:https://www.cnblogs.com/handsomer/p/4150400.html

LeetCode 1785. 构成特定和需要添加的最少元素(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;和两个整数 limit 与 goal 。 数组 nums 有一条重要属性&#xff1a;abs(nums[i]) < limit 。 返回使数组元素总和等于 goal 所需要向数组中添加的 最少元素数量 &#xff0c;添加元素 不应改变 数组中 …

insert和update 锁等待_黑龙F5智感双全智能锁全球首发,掀起惊艳风潮

2020备受瞩目重磅新品 —— 黑龙F5智感双芯智能门锁&#xff0c;正式官宣&#xff0c;革新行业的智感解锁交互&#xff0c;强大的双芯片双智控&#xff0c;再次掀起惊艳风潮。双芯片科技感交互&#xff0c;领行业新风向黑龙F5智能锁前沿性地配备双芯片&#xff0c;以双核分别掌…

java喷泉编码_好程序员Java教程分享使用JS实现简单喷泉效果

原标题&#xff1a;好程序员Java教程分享使用JS实现简单喷泉效果好程序员Java教程分享使用JS实现简单喷泉效果&#xff0c;最近&#xff0c;在教学生使用JS的基本操作&#xff0c;为了练习JS的基本作用&#xff0c;特地写了一个喷泉效果&#xff0c;代码如下&#xff1a;页面代…

python 类继承 父类初始化_python之子类继承父类时进行初始化的一些问题

直接看代码&#xff1a;classPerson:def __init__(self):self.name "jack"classStudent(Person):def __init__(self):self.school "一中"stuStudent()print("学生的姓名是:",stu.name)此时&#xff0c;程序是不能正常运行的&#xff0c;运行之后…

『WPF』实现拖动文件到窗体(控件)

前言 实现从窗口外部拖文件到窗口内部并自动捕获文件地址。 第一步 开启属性 启用底层Window的AllowDrop属性&#xff0c;添加Drop事件。 Drop事件&#xff1a;当你拖动文件到对应控件后&#xff0c;松开触发。 除Drop事件外&#xff0c;我们还可以使用DragEnter、DragOver、Dr…

怎么更改苹果账户名称_番茄todo小组件背景怎么改 苹果番茄todo小组件背景更改方法介绍...

番茄todo小组件背景怎么改&#xff0c;这也是大家会用到的一款倒计时APP&#xff0c;那么用户们应该怎么更改小组件的背景图片呢&#xff0c;可能还有些人不知道更改的方法。所以这里就为大家带来了具体的步骤!番茄todo小组件背景怎么改1.在打开APP后&#xff0c;如没有待办事项…

LeetCode 1786. 从第一个节点出发到最后一个节点的受限路径数(迪杰斯特拉 + 拓扑排序)

文章目录1. 题目2. 解题1. 题目 现有一个加权无向连通图。 给你一个正整数 n &#xff0c;表示图中有 n 个节点&#xff0c;并按从 1 到 n 给节点编号&#xff1b;另给你一个数组 edges &#xff0c;其中每个 edges[i] [ui, vi, weighti] 表示存在一条位于节点 ui 和 vi 之间…

java选择题多选题系统小程序_单选题与多选题判断得分(自动考试小程序,入门级)...

【单选题与多选题判断得分】【核心代码】using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace 自动…

用python开启相机_如何用Python打开realsenseD435相机并获取相机参数

如何用Python打开realsenseD435相机import pyrealsense2 as rsimport numpy as npimport cv2if __name__ "__main__":# Configure depth and color streamspipeline rs.pipeline()config rs.config()config.enable_device_from_file("666.bag")#这是打开…

Sicily-1063

一&#xff0e;题意 一个员工是另外一个员工的老板必须满足的条件是作为老板的员工的薪水salary必须大于这个员工&#xff0c;而且作为老板的员工的身高height要大于等于这个员工。首先按照薪水的多少从小到大进行排序&#xff0c;然后找每一个员工的直属老板。注意老板的下属的…