我试图从ActionListener
方法中从Arraylist<Member>
填充JList
。使用ArrayList从actionlistener中填充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
用,以创建一个界面,用户可以在ArrayList
对象之间选择ArrayList<Member>
。
此外:
...
b14.addActionListener(list10);
...
win5.setPreferredSize(new Dimension(400, 400));
win5.setLayout(new GridLayout(10,1));
win5.setMinimumSize(new Dimension(400, 400));
win5.add(b13);win5.add(l9);win5.add(txt3);win5.add(l10);
win5.add(txt4);win5.add(b14);win5.add(l11);
win5.add(sp);
list.setVisibleRowCount(15);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.addListSelectionListener(this);
...
正如你可以看到JList
是位于空两textfields(txtX)
,labels(lX)
和buttons (bX)
。
public void valueChanged(ListSelectionEvent e){
}
我相信从我宣布actionlistener
外JList
和JScrollPane
再不能填充JList
事实的问题造成的。 valueChanged
方法还没有完全完成(我必须先解决这个问题),但我不认为这个问题是由于它是空的。
从ActionListener
以外填充JList
将不起作用,因为ArrayList
尚未填充。这个想法是,你要搜索一个id或一个familyName或两者,并根据来自SQLite数据库的匹配得到一些选择。结果ArrayList
的内容是基于来自数据库的匹配的对象。
我相信这可能是一些真正的菜鸟错误,但我将不胜感激任何帮助。
的消息,我得到:
你用什么来编译程序?它不应该有任何区别 – MadProgrammer
最新的java版本 – Flowdorio
是的,我刚刚测试了这个,'-Xlint'标志提供了关于缺乏泛型的警告。这意味着编译器无法保证'JList'所期望的数据实际上是您提供的数据。也就是说,你设置它的方式,'JList'需要'Object'类型的元素,但是你正在提供'Memeber'。这不是问题,只要你确保你的渲染器可以处理这个问题。这只是编译器告诉你,它没有办法确定这是否是正确的行为... – MadProgrammer