您的位置:首页 > 移动开发 > Objective-C

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

2012-04-07 13:20 330 查看
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;   

import java.awt.event.MouseEvent;   
  
import javax.swing.JFrame;   
import javax.swing.JScrollPane;   
import javax.swing.JTable;   
import javax.swing.WindowConstants;   
import javax.swing.table.JTableHeader;   
  
  
public class JtableCellTips {   
       
    private JTable table;   
       
    String[] namestooltip={"wow ncp  name","some word"};   
       
    public JtableCellTips(){   
        JFrame f = new JFrame();   
        f.setSize(300, 200);   
        Object[][] playerInfo = {   
                { "提里奥.弗丁", "种族不代表荣耀,我见过最高尚的兽人,也见过最卑劣的人类。" },   
                { "莫格莱尼", "生命本身毫无意义,只有死亡才能让你了解人性的真谛。"} };   
        String[] Names = { "姓名", "台词" };   
           
           
        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;   
            }   
               
             protected JTableHeader createDefaultTableHeader() {   
                    return new JTableHeader(columnModel) {   
                        public String getToolTipText(MouseEvent e) {   
                            String tip = null;   
                            java.awt.Point p = e.getPoint();   
                            int index = columnModel.getColumnIndexAtX(p.x);   
                            int realIndex =  columnModel.getColumn(index).getModelIndex();   
                            return namestooltip[realIndex];   
                        }   
                    };   
                }   
  
        };   
           
        //悬浮提示单元格的值    
//      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);//关闭提示  
//              }   
//          }   
//      });   
           
        JScrollPane scrollPane = new JScrollPane(table);   
        f.getContentPane().add(scrollPane, BorderLayout.CENTER);   
        f.setTitle("单元格悬浮提示");   
        f.setLocationRelativeTo(null);   
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);   
        f.setVisible(true);   
           
    }   
       
    public static void main(String[] args) {   
        new JtableCellTips();   
    }   
  
}  

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息