<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 12">
<meta name="Originator" content="Microsoft Word 12">
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cphoenix%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml">
<link rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5Cphoenix%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_editdata.mso">
<!--[if !mso]>
<style>
v":* {behavior:url(#default#VML);}
o":* {behavior:url(#default#VML);}
w":* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><link rel="themeData" href="file:///C:%5CDOCUME%7E1%5Cphoenix%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx">
<link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5Cphoenix%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml">
<!--[if gte mso 9]><xml>
Normal
0
false
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
</xml><![endif]--><!--[if gte mso 9]><![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:"Times New Roman";}
@font-face
{font-family:""@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{
mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Calibri","serif";
mso-bidi-font-family:"Times New Roman";}
.MsoChpDefault
{
mso-bidi-font-family:"Times New Roman";}
/* Page Definitions */
@page
{}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{
mso-style-parent:"";
font-size:10.5pt;
font-family:"Calibri","serif";}
</style>
<![endif]-->
JTable的ToolTip提示和其它的组件提示是一样的,因为它们都是继承于Jcomponent,当我们需要为我们的单元格实现ToolTip的时候,只需要复写它的getToolTipText方法就可以了,
看看Sun官方的例子:
<!--[if gte vml 1]>
<![endif]-->
//Implement table cell tool tips.
@Override
public String getToolTipText(MouseEvent
e) {
取得鼠标的行和列:
java.awt.Point p = e.getPoint();
int rowIndex = rowAtPoint(p);
int colIndex = columnAtPoint(p);
int ealColumnIndex = convertColumnIndexToModel(colIndex);
设置你需要显示的ToolTip,然后返回
tip = ……;
returntip;
同样的JTableHeader也是如此:
protected JTableHeader
createDefaultTableHeader() {
returnnew JTableHeader(columnModel) {
@Override
public String
getToolTipText(MouseEvent e) {
这样不用其它设置,JTable的基本ToolTip就实现了,它虽然比较简单,但是最大的好处是不用自己考虑定位和显示的问题,很多时候也就可以了.
关于JTable的简单ToolTip提示就算是完成了,当我们只是简单的提示的时候,只需要复写JTable的getToolTipText和setToolTipText方法就可以了,上个例子就是这样;但是当我们需要使我们的ToolTip提示不像Sun提供的那么单调,我们就需要自己来实现了.
这时候的重点已经不在JTable上了,而在于ToolTip上面,我们可以把我们需要呈现的ToolTip实现为一个JPanel,这样就可以在它的上面放置各种组件了,设置放图标都可以,这个时候就需要实现这个ToolTip的UI和Manager,这方面有很多开源的实现,以后有时间的话开个专题专门来介绍ToolTip的,这里不写了.
对于已经实现好的我们自己的ToolTip,我们需要做的是把它注册到我们的JTable上面,再根据鼠标的位置显示它,如下图所示,它可以有Title,可以有图片,可以有正文,甚至可以再加别的组件.如下图所示:
<!--[if gte vml 1]>
<![endif]-->
我们需要的是增加监听:
addMouseListener(this)
根据监听的状态处理ToolTip:
@Override
publicvoid mouseExited(MouseEvent event) {
隐藏
@Override
publicvoid mousePressed(MouseEvent event) {
显示
@Override
publicvoid mouseMoved(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();
int row =
rowAtPoint(p);
int col =
columnAtPoint(p);
if (row == -1
|| col == -1) {
returnnull;
}
Object data = getValueAt(row, col);
当然此时你可以对data做变换,从而显示需要的值.
使用很简单,注册就可以了.
setActionRichTooltip(new RichTooltip());
然后是另外一种ToolTip的效果,这个是一个开源的实现,只抓张图看看就算了,和前面的实现基本类似,还比那个简单,也是UI,Timer以及位置计算.如下图,代码在open就有:
<!--[if gte vml 1]>
<![endif]-->
ToolTip到这儿就算完了,但是实际使用中可能有这个问题,如下图:
<!--[if gte vml 1]>
<![endif]-->
这是因为我们经过设置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();
}
}
}
最后效果如图:
<!--[if gte vml 1]>
<![endif]-->
到此为止,所有关于JTable的ToolTip提示就完成了,当然我实现的都是一些基本的效果,比较复杂的效果,则需要你自己去绘制和实现ToolTip了,说句简单的,技术完成了,以后就是玩色彩和审美了,做程序也就这样了,很多时候后者重要.
分享到:
相关推荐
易语言高级表格勾选提示框模块源码,高级表格勾选提示框模块,高级表格选中框提示框子程序,汇编调用子程序
NULL 博文链接:https://laodaobazi.iteye.com/blog/1064607
NULL 博文链接:https://shihuan830619.iteye.com/blog/2087848
易语言源码易语言高级表格勾选提示框模块源码.rar 易语言源码易语言高级表格勾选提示框模块源码.rar 易语言源码易语言高级表格勾选提示框模块源码.rar 易语言源码易语言高级表格勾选提示框模块源码.rar 易语言...
实验啊 获取积分实验啊 获取积分实验啊 获取积分
将图片按照表格框线交叉点分割成子图片(传入图片路径) @author: hx import cv2 import numpy as np import pytesseract image = cv2.imread('C:/Users/Administrator/Desktop/7.jpg', 1) #灰
/** * * @author 翟正强 广东中山中南中南T25班 * @version1.0 * @2009-09-08 * @表格渲染(悬浮变色,隔行换色,点击变色) */
vb表格框控件源码 vb表格框控件源码
LabVIEW表格插入组合框
变色的表格框
当显示的table宽度受限制固定宽度时,表格的展示列又很多的时候,如何更好地处理并展示,可下载资源查看,可拖动表格,表格可左右拖动,表格td边框可以左右拖动,表格里的内容可以很好的显示。
使用bootstrap编写的动态表格【当滚动纵向的滚动条时,表格的表头处于悬浮状态,表格的内容滚动;当滚动横向的滚动条时,表格的表头和表格的内容对应着一起滚动】
JavaFX2.0 表格框 TableView
易语言属性框高级表格版源码,属性框高级表格版,高级表格消息处理,屏幕到客户_矩形,调用窗口回调_,置窗口信息_,屏幕到客户区_,置父窗口_,客户区到屏幕_,取窗口矩形_,屏幕到客户区_矩形_
前端UI框架表格强大JQWIDGETS.主要用于HTML5上的使用哦。jquery2.03以上.
Android开发之动态生成表格及其边框专栏博客频道
复选框选中表格中的行进行删除行操作 复选框选中表格中的行进行删除行操作 复选框选中表格中的行进行删除行操作