Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用arraylist从actionlistener内部填充JList_Java_Swing_Arraylist_Jlist - Fatal编程技术网

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
期望的数据实际上就是您提供的数据