jtable单元格的悬浮提示和表头标题的悬浮提示

swing 项目时遇到这样一个问题:jtable显示内容时其中某列内容比较长通常显示不下,又因为某些原因不想或不能给予这列足够的空间,于是就想到了ToolTip。

         查了下java API发现jtbale中只有个getToolTipText的方法须在渲染器中设置,由于没有使用自定义的Render,所以使用了父类JComponent的setToolTipText方法。具体原理为:setToolTipText是整个jtable单元格的提示,可在鼠标事件中根据不同的单元格提示不同的信息。

 代码如下:  

	//悬浮提示单元格的值 
		table.addMouseMotionListener(new MouseAdapter(){
			public void mouseMoved(MouseEvent e) {
				int row=table.rowAtPoint(e.getPoint());
				int col=table.columnAtPoint(e.getPoint());
				if(row>-1 && col>-1){
					Object value=table.getValueAt(row, col);
					if(null!=value && !"".equals(value))
						table.setToolTipText(value.toString());//悬浮显示单元格内容
					else
						table.setToolTipText(null);//关闭提示
				}
			}
		}); 

 后来发现直接重写jtable的public String getToolTipText(MouseEvent e)方法也可以达到效果,看来下jtbale源代码getToolTipText也是取自父类JComponent的getToolTipText方法。  

还是直接重写方便点 

table = new JTable(playerInfo, Names){
			public String getToolTipText(MouseEvent e) {
				int row=table.rowAtPoint(e.getPoint());
				int col=table.columnAtPoint(e.getPoint());
				String tiptextString=null;
				if(row>-1 && col>-1){
					Object value=table.getValueAt(row, col);
					if(null!=value && !"".equals(value))
						tiptextString=value.toString();//悬浮显示单元格内容
				}
				return tiptextString;
			}
		};

  jtable表头的提示需重写JTableHeader的public String getToolTipText(MouseEvent e)方法。

  最后列子如下(表头提示和单元格提示):

 import java.awt.BorderLayout;   

  1. import java.awt.event.MouseEvent;   
  2.   
  3. import javax.swing.JFrame;   
  4. import javax.swing.JScrollPane;   
  5. import javax.swing.JTable;   
  6. import javax.swing.WindowConstants;   
  7. import javax.swing.table.JTableHeader;   
  8.   
  9.   
  10. public class JtableCellTips {   
  11.        
  12.     private JTable table;   
  13.        
  14.     String[] namestooltip={"wow ncp  name","some word"};   
  15.        
  16.     public JtableCellTips(){   
  17.         JFrame f = new JFrame();   
  18.         f.setSize(300200);   
  19.         Object[][] playerInfo = {   
  20.                 { "提里奥.弗丁""种族不代表荣耀,我见过最高尚的兽人,也见过最卑劣的人类。" },   
  21.                 { "莫格莱尼""生命本身毫无意义,只有死亡才能让你了解人性的真谛。"} };   
  22.         String[] Names = { "姓名""台词" };   
  23.            
  24.            
  25.         table = new JTable(playerInfo, Names){   
  26.             public String getToolTipText(MouseEvent e) {   
  27.                 int row=table.rowAtPoint(e.getPoint());   
  28.                 int col=table.columnAtPoint(e.getPoint());   
  29.                 String tiptextString=null;   
  30.                 if(row>-1 && col>-1){   
  31.                     Object value=table.getValueAt(row, col);   
  32.                     if(null!=value && !"".equals(value))   
  33.                         tiptextString=value.toString();//悬浮显示单元格内容  
  34.                 }   
  35.                 return tiptextString;   
  36.             }   
  37.                
  38.              protected JTableHeader createDefaultTableHeader() {   
  39.                     return new JTableHeader(columnModel) {   
  40.                         public String getToolTipText(MouseEvent e) {   
  41.                             String tip = null;   
  42.                             java.awt.Point p = e.getPoint();   
  43.                             int index = columnModel.getColumnIndexAtX(p.x);   
  44.                             int realIndex =  columnModel.getColumn(index).getModelIndex();   
  45.                             return namestooltip[realIndex];   
  46.                         }   
  47.                     };   
  48.                 }   
  49.   
  50.         };   
  51.            
  52.         //悬浮提示单元格的值    
  53. //      table.addMouseMotionListener(new MouseAdapter(){  
  54. //          public void mouseMoved(MouseEvent e) {  
  55. //              int row=table.rowAtPoint(e.getPoint());  
  56. //              int col=table.columnAtPoint(e.getPoint());  
  57. //              if(row>-1 && col>-1){   
  58. //                  Object value=table.getValueAt(row, col);  
  59. //                  if(null!=value && !"".equals(value))  
  60. //                      table.setToolTipText(value.toString());//悬浮显示单元格内容  
  61. //                  else   
  62. //                      table.setToolTipText(null);//关闭提示  
  63. //              }   
  64. //          }   
  65. //      });   
  66.            
  67.         JScrollPane scrollPane = new JScrollPane(table);   
  68.         f.getContentPane().add(scrollPane, BorderLayout.CENTER);   
  69.         f.setTitle("单元格悬浮提示");   
  70.         f.setLocationRelativeTo(null);   
  71.         f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);   
  72.         f.setVisible(true);   
  73.            
  74.     }   
  75.        
  76.     public static void main(String[] args) {   
  77.         new JtableCellTips();   
  78.     }   
  79.   
  80. }  

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值