`
skull
  • 浏览: 17948 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

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;
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();
	}

}

 

1
2
分享到:
评论

相关推荐

    Swing JTable组件设置单元格合并

    Swing JTable组件设置单元格合并,内置Test测试类,核心API GridBagTable tasktable = new GridBagTable(model); tasktable.mergeCells(startRow, endRow, 0, 0);

    TableCellRenderer的用法(JTable单元格背景颜色设置)

    实现设置JTable中某些单元格的背景色

    Java Swing实现JTable检测单元格数据变更事件的方法示例

    Java Swing 实现 JTable 检测单元格数据变更事件的方法示例 Java Swing 中的 JTable 是一个功能强大且灵活的表格组件,广泛应用于各种桌面应用程序中。然而,在实际开发中,我们经常需要检测单元格数据的变更事件...

    JTable自动换行

    在处理`JTable`时,我们有时需要使其单元格内容支持自动换行,以便更好地显示长文本。标题“JTable自动换行”正是指向这个功能,即如何在`JTable`的单元格内实现文本的自动换行。 默认情况下,`JTable`的单元格使用...

    JTable合并单元格

    当你需要在`JTable`中实现特定的布局或者展示特殊格式的数据时,可能会遇到需要合并单元格的需求。例如,为了创建一个标题行或列,或者在某些情况下合并具有相同数据的单元格以减少重复,合并单元格就显得尤为重要。...

    JTable 操作单元格 行 列

    本篇文章将深入探讨`JTable`如何操作单元格、行和列,以帮助你更好地理解和运用这一功能强大的组件。 ### 单元格操作 1. **创建和设置单元格值**:`JTable`中的每个单元格都由一个`DefaultTableModel`管理。你可以...

    Jtable 中放入多个按钮

    当我们需要在`JTable`中实现更复杂的交互,比如在一个单元格内放置多个按钮时,这通常涉及到自定义`TableCellRenderer`和`TableCellEditor`。下面我们将深入探讨如何在`JTable`中放入多个按钮以及相关的技术细节。 ...

    JTable表格单元加按钮,并且响应点击事件Demo.rar

    用改写 DefaultCellEditor 和 TableCellRenderer的方法实现,主要代码: table.getColumnModel().getColumn(2).setCellEditor(new MyButtonEditor()); table.getColumnModel().getColumn(2).setCellRenderer...

    JTable动态刷新数据

    Vector 的每个元素都是一个行数据,行数据又是一个 Vector,包含了每个单元格的数据。这样,DefaultTableModel 可以轻松地存储和管理大量数据。 在刷新数据时,需要使用 TableModel 的 getDataVector() 方法获取...

    jtable中放多个Button.rar

    而将多个Button放入JTable的同一单元格中,可以提供更丰富的交互性,这在某些复杂的应用场景下是必要的。本教程将详细介绍如何在JTable中实现这一功能。 首先,我们需要了解JTable的基本结构。JTable由一个...

    jTree和jTable 双向联动

    实现jTable和jTree的双向联动,点击jTree会选中jTable单元格,点击jTable会选中jTree节点。

    如何在JTable的单元格里添加图片,Button组件,Label组件等等组件

    添加组件后,在组件上添加图片 1.设置Table的Model这个需要重写AbstractTableModel类, 2.设置Table的DefaultRenderer,这个根据个人需要选择将要添加到Table的cell里的 组件(JButton,JLable...)继承相应的组件...

    JTable添加CheckBox

    `JTable`依赖于`TableModel`来获取和设置单元格的值。在这个例子中,我们需要创建一个自定义的`TableModel`,以便支持`CheckBox`作为单元格的视图。这通常意味着我们需要重写`getValueAt()`和`setValueAt()`方法,以...

    基于JTable的列宽与内容自适应的实现方法

    然而,默认情况下,`JTable`的列宽是平均分配的,这可能导致某些含有长内容的单元格被截断,影响了用户体验。为了解决这个问题,我们可以实现列宽与内容自适应的功能,确保每一列的宽度根据其内容的长度自动调整。...

    JTable (动态添加数据)

    它可以自动处理用户交互,如排序、选择和编辑单元格。`JTable`的数据存储在`TableModel`对象中。 2. **JavaBean**: JavaBean是一种符合特定规范的Java类,主要用于封装数据和业务逻辑。它们通常具有默认构造函数...

    JTable使用 JTable使用

    JTable使用 JTable使用JTable使用JTable使用

    JTable 练习例子exa

    在实际使用中,`JTable`提供了丰富的功能,如排序、选择、编辑单元格等。可以通过设置列的`ColumnModel`来控制列的宽度、是否可编辑等属性。另外,`JTable`可以与`JComboBox`、`JCheckBox`等其他组件集成,实现复杂...

    java 中 Jtable的用法

    JTable还支持自定义单元格的样式,包括网格线颜色、行高、选中时的前景色与背景色等。 - 更改网格线颜色:`table.setGridColor(Color.black);` - 设置行高:`table.setRowHeight(30);` - 设置选中项的背景色:`...

    jTable的使用

    1. **数据编辑**:默认情况下,jTable支持单元格的编辑。你可以通过`isCellEditable()`方法控制哪些单元格可编辑。 2. **排序**:jTable可以实现自动排序。只需设置`AutoCreateRowSorter`属性为`true`,用户点击...

    JTable

    JTable的显示效果

Global site tag (gtag.js) - Google Analytics