我试图一次选择多个项目并将它们添加到我的表中,但是当我尝试这样做时,我得到了一个数组越界异常。我认为这是由于我的 listToArr 方法,因为它允许我一次选择一个项目,没有任何错误。我之所以使用 listToArr 方法,是因为表模型中的 insertRow(( 第一个参数需要一个 int,第二个参数需要一个 Object[] 或 Vector。
我也想知道如何在按下选择按钮后使突出显示的选定项目变得不突出显示。
private void populateTable(JList<String> items){
DefaultTableModel t = (DefaultTableModel) selectedItemsTable.getModel();
t.insertRow(t.getRowCount()-1, listToArr(items));
selectedItemsTable.setModel(t);
}
private Object[] listToArr(JList<String> l){
Object[] o = new Object[l.getComponentCount()];
int i=0;
for(Object value : l.getSelectedValuesList()){
o[i] = (Object) value;
i++;
}
return o;
}
private void SelectNeedActionPerformed(java.awt.event.ActionEvent evt) {
populateTable(needsList);
}
以及第二个参数的对象 [] 或矢量。
第二个参数是一个 Array,其中包含行中每一列的数据。当您只选择单个项目时,这意味着表中只有一列。
如果您选择 3 个项目,则意味着表中将有 3 列。
我怀疑您只用一列创建了表。这意味着您需要遍历所选项目列表并添加一个单独包含每个项目的数组,这将为您提供 3 行,只有一列。
因为表模型中的 insertRow(( 需要第一个参数的 int
你可以只使用DefaultTableModel
的addRow(...)
方法。它会将该行添加到表模型的末尾。
//selectedItemsTable.setModel(t); // get rid of this
无需重置模型。使用模型的要点是,当数据发生更改时,它将通知视图(JTable(。