列表声明
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()之外,我首先得到了大部分代码。
答案 0 :(得分:2)
请不要告诉我参考Oracle的文档
实际上,这正是您需要做的。阅读How to Use Lists上的Swing教程中的部分。
如果您查看ListDemo
示例中的工作示例代码,您会看到将数据添加到DefaultListModel
而不是JList
。
另外,您会看到String
添加到DefaultListModel
,而不是JLabel
。
所以,是的,教程中的工作示例是开始的地方。从工作实例中学习。您发布的代码看起来与工作示例完全不同。
此外,您将使用getSelectedIndex()
,而不是getLastVisibleIndex()来确定插入数据的位置。然后,您需要阅读DefaultListModel
API,以便在模型中的特定位置插入数据。