我有一个JTable,我正在尝试添加一个标题工具提示,它将显示每个标题单元格的表头中的字符串。我可以设置标题单元格的值:
colModel.getColumn(currentColumn).setHeaderValue(time + "(s)");
其中colModel:
TableColumnModel colModel = audioTable.getColumnModel();
为此,我添加了这个监听器:
audioTable = new JTable(modelAudio);
JTableHeader header = audioTable.getTableHeader();
header.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e) {
System.out.println("mouseMoved");
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent e) {
System.out.println("mouseDragged");
// TODO Auto-generated method stub
}
});
我看到mouseMoved
在这个NPE之间反复打印:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.plaf.synth.SynthTableHeaderUI$HeaderRenderer.getTableCellRendererComponent(Unknown Source)
at javax.swing.table.JTableHeader.getToolTipText(Unknown Source)
at javax.swing.ToolTipManager$insideTimerAction.actionPerformed(Unknown Source)
at javax.swing.Timer.fireActionPerformed(Unknown Source)
at javax.swing.Timer$DoPostEvent.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
我不知道如何获得更长的堆栈跟踪,这就是我创建表的方式:
modelAudio = new DefaultTableModel();
modelAudio.addColumn(" ");
audioTable = new JTable(modelAudio);
我想要做的棘手的事情是动态添加列,所以每次用户填充当前列时都会添加一列,如下所示:
TableColumn tc = new TableColumn(modelAudio.getColumnCount());
tc.setHeaderValue(" ");
audioTable.addColumn(tc);
modelAudio.addColumn(tc);
我添加列的方式是导致此NPE的问题吗?