Jlist未添加所选项目

时间:2017-03-24 14:39:32

标签: swing netbeans jlist jtree

列表声明

private javax.swing.JTree SourcebooksAvailablePanel;
private javax.swing.JList<String> sourcebooksSelectedPanel;

因此,JTree中包含了我想要有选择地复制JList(在NetBeans GUI构建器中创建)的内容。基本上选择你想要的位,点击按钮然后将其复制到列表中。

以下是转移到目前为止的代码:到目前为止一切正常但最后一行似乎无效。它汇编得很好。

private void bookAddButtonMouseReleased(java.awt.event.MouseEvent evt) {                                            
String bookName = SourcebooksAvailablePanel.getLastSelectedPathComponent().toString();
// temp variable to grab the contents of selected Jtree node and put into string
JLabel bookLabel = new JLabel(bookName);
//temp invisible label to put into Jlist because Jlist add method doesn't like Strings. Takes bookName as its text

//add code to check if user has already added item at later point

Object balls = SourcebooksAvailablePanel.getLastSelectedPathComponent();
System.out.println(balls); //temp to check if the balls work

int index = sourcebooksSelectedPanel.getLastVisibleIndex(); //get last index of list
if (index == -1) //no items currently populating list
{
    index = 0; //lists and arrays are 0 indexed in Java so this puts the item at the beginning
}
else
{
    index++; //add after the current last item in list
}

Component add = sourcebooksSelectedPanel.add(bookLabel, index);
//supposed to add bookLabel's text to the specified index of the list but nope.
//everything else has been tested and works. Just this command

如果我在最后一行将bookLabel更改为球,则会引发错误“找不到合适的方法”。

好的我哪里错了?请不要告诉我参考Oracle的文档,因为我已经去过那里了,除了用add()替换addElement()之外,我首先得到了大部分代码。

1 个答案:

答案 0 :(得分:2)

  

请不要告诉我参考Oracle的文档

实际上,这正是您需要做的。阅读How to Use Lists上的Swing教程中的部分。

如果您查看ListDemo示例中的工作示例代码,您会看到将数据添加到DefaultListModel而不是JList

另外,您会看到String添加到DefaultListModel,而不是JLabel

所以,是的,教程中的工作示例是开始的地方。从工作实例中学习。您发布的代码看起来与工作示例完全不同。

此外,您将使用getSelectedIndex(),而不是getLastVisibleIndex()来确定插入数据的位置。然后,您需要阅读DefaultListModel API,以便在模型中的特定位置插入数据。