在Jlist中选择多个项目

时间:2017-03-21 16:54:36

标签: java swing jtable jlist

我试图能够一次选择多个项目并将它们添加到我的表中但是当我尝试这样做时,我得到一个超出范围的数组异常。我认为这是由于我的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);
}  

1 个答案:

答案 0 :(得分:1)

  

和第二个参数的Object []或Vector。

第二个参数是一个Array,其中包含行中每列的数据。如果只选择单个项目,则表示表格中只有一列。

如果选择3个项目,则表示表格中有3列。

我怀疑你用一列只创建了你的表。这意味着您需要遍历所选项目的列表并分别添加包含每个项目的数组,这将为您提供仅包含一列的3行。

  

因为表模型中的insertRow()需要第一个参数

的int

您可以使用 class ViewController: UIViewController, RequestProtocol { func RequestConnection(json: JSON, status: Int, Message: String) { func showAlertView() } override func viewDidLoad() { super.viewDidLoad() var senderDelegateRequest = API() var receiverDelegateViewController = ViewController() senderDelegateRequest.delegate = receiverDelegateRequestRegistro senderDelegateRequest.RequestConnection() } func showAlertView(){ let alertView = UIAlertController(title: "You need to log in first", message: "To access the special features of the app you need to log in first.", preferredStyle: .alert) alertView.addAction(UIAlertAction(title: "Login", style: .default, handler: { (alertAction) -> Void in })) alertView.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) present(alertView, animated: true, completion: nil) } 的{​​{1}}方法。它会将行添加到表模型的末尾。

addRow(...)

无需重置模型。使用模型的关键是它会在数据发生变化时通知视图(JTable)。