动态添加列到 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);
}
}
但是我得到了一个
线程“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)
I have an empty JTable, absolutely nothing in it. I need to dynamically generate its table columns in a certain way. A simplified version for the code I have for my attempt:
@Action
public void AddCol() {
for (int i = 0; i < 10; i++) {
TableColumn c = new TableColumn(i);
c.setHeaderValue(getColNam(i));
table.getColumnModel().addColumn(c);
}
}
But I'm getting an
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
What am I doing wrong?
Here's the complete stacktrace if it helps:
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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为您需要将该列添加到表的数据模型及其列模型中。当数据模型更改时,列模型也会更新,因此更改数据模型就足够了。这是一个例子:
I think you need to add the column to your table's data model as well as its column model. The column model is updated when the data model changes so changing the data model should be sufficient. Here is an example:
如果您想快速添加字符串列名称列表,请使用此方法。
If you want to add a list of string column names in a quick way, use this.
我们没有完整的 StackTrace,所以我不能确定,但我猜想异常是在
getColNam(i)
处引发的,您可能在其中引用了一些空的 Collection。尝试将其替换为
以找出答案。
如果这不是问题,您可以尝试不带参数的
TableColumn
- 构造函数:We don't have the complete StackTrace, so I can't tell for sure, but I guess that the exception is thrown at
getColNam(i)
where you could be referring to some empty Collection.Try to replace it by
to find out.
If this is not the problem, you could try the
TableColumn
-Constructor without parameter: