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();
}
}
分享到:
相关推荐
主要介绍了Java Swing实现JTable检测单元格数据变更事件的方法,结合完整实例形式分析了Swing实现JTable检测单元格数据变更事件过程中出现的问题与相关解决方法,需要的朋友可以参考下
实现设置JTable中某些单元格的背景色
用改写 DefaultCellEditor 和 TableCellRenderer的方法实现,主要代码: table.getColumnModel().getColumn(2).setCellEditor(new MyButtonEditor()); table.getColumnModel().getColumn(2).setCellRenderer...
JTable合并单元格 工作中碰到了此问题,在网上找了半天资料,没有找到我想实现的功能,最后选了相近的,加以修改。放于此处做个备份,也与大家共享一下。
原创 Java JTable 操作单元格 行 列
JTable 在一个单元格放入多个按钮,
JTable的自动换行。挺好用的。里面还可以设置字体大小。分享一下。
实现jTable和jTree的双向联动,点击jTree会选中jTable单元格,点击jTable会选中jTree节点。
添加组件后,在组件上添加图片 1.设置Table的Model这个需要重写AbstractTableModel类, 2.设置Table的DefaultRenderer,这个根据个人需要选择将要添加到Table的cell里的 组件(JButton,JLable...)继承相应的组件...
Swing JTable组件设置单元格合并,内置Test测试类,核心API GridBagTable tasktable = new GridBagTable(model); tasktable.mergeCells(startRow, endRow, 0, 0);
一个JTable里添加CheckBox的完整例子,包括表头的JCheckBox全选联动
JTable使用 JTable使用JTable使用JTable使用
网上下载的swing的jtable合并单元格,单元格设置字体,大小,背景和前景色
JTable的显示效果
JTable的使用收藏 1.JTable与TableModel 1.TableModel与JTable的关系 2.TableModel实践 3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将...
JTable动态刷新数据JTable动态刷新数据JTable动态刷新数据JTable动态刷新数据
Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性
swing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing ...
ResultSet直接在JTable显示
1、重写JTable组件,标题带有CheckBox。 2、实现CheckBox单元格的Check状态更新标题的Check状态;改变标题CheckBox状态,改变全部单元格状态。即,标题栏、单元格的CheckBox状态双向更新。 3、自定义JTable数据模型...