jon*_*ita 1 java user-interface swing jtable
我有一个空的JTable,绝对没有.我需要以某种方式动态生成其表列.我尝试的代码的简化版本:
@Action
public void AddCol() {
for (int i = 0; i < 10; i++) {
TableColumn c = new TableColumn(i);
c.setHeaderValue(getColNam(i));
table.getColumnModel().addColumn(c);
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到了一个
线程"AWT-EventQueue-0"中的异常java.lang.ArrayIndexOutOfBoundsException:0> = 0
我究竟做错了什么?
如果它有帮助,这是完整的堆栈跟踪:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:632)
at engine.Processor$UpdateTable.run(Processor.java:131)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Run Code Online (Sandbox Code Playgroud)
我认为您需要将列添加到表的数据模型及其列模型中.当数据模型更改时,列模型会更新,因此更改数据模型应该足够了.这是一个例子:
public class TableColumnAdd {
private static DefaultTableModel tableModel;
private static int columnNumber = 1;
public static void main(String[] args) throws InterruptedException, InvocationTargetException {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
tableModel = new DefaultTableModel(new Object[] { "Initial Column" }, 5);
JTable table = new JTable(tableModel);
JFrame frame = new JFrame("Table Column Add");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 600, 300);
frame.add(new JScrollPane(table));
frame.setVisible(true);
}
});
for (;;) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
tableModel.addColumn("Column #" + columnNumber++);
}
});
Thread.sleep(2000);
}
}
}
Run Code Online (Sandbox Code Playgroud)