Java 使用arraylist从actionlistener内部填充JList
我正在尝试从Java 使用arraylist从actionlistener内部填充JList,java,swing,arraylist,jlist,Java,Swing,Arraylist,Jlist,我正在尝试从Arraylist方法内部填充JList public class guiDemo extends JFrame implements ListSelectionListener { ... private JList list = new JList(); private JScrollPane sp = new JScrollPane(); ... ActionListener list10 = new ActionListener() { public void ac
Arraylist
方法内部填充JList
public class guiDemo extends JFrame implements ListSelectionListener {
...
private JList list = new JList();
private JScrollPane sp = new JScrollPane();
...
ActionListener list10 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
win5.setVisible(true);
p1.setVisible(false);
String familyName = null;
int id = 0;
try {
familyName = (txt4.getText());
id = Integer.parseInt(txt3.getText());
} catch (NumberFormatException ne) {
System.out.println("error");
id = 0;
}
try{
ArrayList<Member> result = getMembersForList(id, familyName);
list = new JList(result.toArray());
sp = new JScrollPane(list);
} catch (SQLException se) {
txt.setText("SQLException!");
}
catch ( ClassNotFoundException ce) {
txt.setText("ClassNotFoundException!");
}
}
};
如您所见,JList
将位于两个文本字段(txtX)
、标签(lX)
和按钮(bX)
下面
我认为问题的根源在于我在actionlistener
之外声明了JList
和JScrollPane
,然后无法填充JList
。valueChanged
方法没有完全完成(我必须先解决这个问题),但我不相信这个问题是因为它是空的
从ActionListener
外部填充JList
将不起作用,因为ArrayList
尚未填充。其思想是搜索id或familyName或两者,并根据SQLite db中的匹配项获得大量选择。结果ArrayList
的内容是基于数据库匹配的对象
我相信这可能是一些真正的新手错误,但我会感谢任何我能得到的帮助
我得到的信息是:
我认为这只是因为JList是一个泛型类型,您试图将其用作原始类型 请注意,这些只是警告,而不是错误。
如果您说
JList
,这些警告可能会消失 我认为这只是因为JList是一个泛型类型,而您尝试将其用作原始类型
请注意,这些只是警告,而不是错误。如果您说
JList
,这些警告可能会消失 我认为这只是因为JList是一个泛型类型,而您尝试将其用作原始类型
请注意,这些只是警告,而不是错误。如果您说
JList
,这些警告可能会消失 我认为这只是因为JList是一个泛型类型,而您尝试将其用作原始类型
请注意,这些只是警告,而不是错误。如果您说
JList
,这些警告可能会消失 首先,-Xlint
标志提供关于缺少泛型的警告
这意味着编译器无法保证JList
所期望的数据实际上就是您提供的数据。也就是说,按照您的设置方式,JList
需要Object类型的元素,但您提供的是Memeber
这不是一个问题,只要您确保渲染器能够实际处理这个问题。只是编译器告诉您,它无法确定这是否是正确的行为……这可能会导致运行时出现问题
在可能的情况下,tp最好提供对泛型的支持,但这并不总是可能的
private JList<Member> list ...;
//...
ArrayList<Member> result = getMembersForList(id, familyName);
list = new JList(result.toArray(new Member[result.size()]));
然后将这些添加到UI
sp.setViewportView(list);
add(sp); // for example...
然后在actionPerformed
方法中,创建这些对象的新实例
list = new JList(result.toArray());
sp = new JScrollPane(list);
但是永远不要将它们添加到UI中,有些人多么神奇地期望它们知道如何链接到以前的实例并更新UI
这不是它的工作原理。在actionPerformed
方法中创建的实例与之前创建的对象没有关系。相反,您应该更改JList
的模型,例如
ActionListener list10 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
//...
try{
//ArrayList<Member> result = getMembersForList(id, familyName);
//list = new JList(result.toArray());
//sp = new JScrollPane(list);
DefaultListModel model = new DefaultListModel();
for (Member member : getMembersForList(id, familyName)) {
model.addElement(member);
}
list.setModel(model);
//...
}
};
ActionListener列表10=新建ActionListener(){
已执行的公共无效操作(操作事件e){
//...
试一试{
//ArrayList结果=getMembersForList(id,familyName);
//列表=新的JList(result.toArray());
//sp=新的JScrollPane(列表);
DefaultListModel=新的DefaultListModel();
for(成员:getMembersForList(id,familyName)){
模型.补充件(成员);
}
list.setModel(model);
//...
}
};
首先,-Xlint
标志提供关于缺少泛型的警告
这意味着编译器不能保证JList
期望的数据实际上就是您提供的数据。也就是说,按照您的设置方式,JList
期望的是Object类型的元素,而您提供的是Memeber
这不是一个问题,只要你已经确保你的渲染器能够真正处理这个问题。只是编译器告诉你,它无法确保这是正确的行为与否…这可能会导致运行时出现问题
在可能的情况下,tp最好提供对泛型的支持,但这并不总是可能的
private JList<Member> list ...;
//...
ArrayList<Member> result = getMembersForList(id, familyName);
list = new JList(result.toArray(new Member[result.size()]));
然后将这些添加到UI
sp.setViewportView(list);
add(sp); // for example...
然后在actionPerformed
方法中,创建这些对象的新实例
list = new JList(result.toArray());
sp = new JScrollPane(list);
但是永远不要将它们添加到UI中,有些人多么神奇地期望它们知道如何链接到以前的实例并更新UI
这不是它的工作方式。您在actionPerformed
方法中创建的实例与以前创建的对象没有关系。相反,您应该更改JList
的模型,例如
ActionListener list10 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
//...
try{
//ArrayList<Member> result = getMembersForList(id, familyName);
//list = new JList(result.toArray());
//sp = new JScrollPane(list);
DefaultListModel model = new DefaultListModel();
for (Member member : getMembersForList(id, familyName)) {
model.addElement(member);
}
list.setModel(model);
//...
}
};
ActionListener列表10=新建ActionListener(){
已执行的公共无效操作(操作事件e){
//...
试一试{
//ArrayList结果=getMembersForList(id,familyName);
//列表=新的JList(result.toArray());
//sp=新的JScrollPane(列表);
DefaultListModel=新的DefaultListModel();
for(成员:getMembersForList(id,familyName)){
模型.补充件(成员);
}
list.setModel(model);
//...
}
};
首先,-Xlint
标志提供关于缺少泛型的警告
这意味着编译器不能保证JList
期望的数据实际上就是您提供的数据