У меня есть 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?