Java actionPerformed不适用于其他方法

Java actionPerformed不适用于其他方法,java,swing,applet,Java,Swing,Applet,下面是控件的初始化 public void init(){ ... c = new JComboBox(); .... c.addActionListener(this); p2 = new JPanel(); vt = new Vector(); ChannelList cl = new ChannelList(); lchannels = new JList(vt); lchannels.setSelectio

下面是控件的初始化

public void init(){
    ...
    c = new JComboBox();
    ....
    c.addActionListener(this);

    p2 = new JPanel();
    vt = new Vector();
    ChannelList cl = new ChannelList();

    lchannels = new JList(vt);   
    lchannels.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    jp = new JScrollPane(lchannels);
    cl.createList();

    p2.add(jp);
    p2.setBorder(new TitledBorder("Channel Titles Available"));  
    p2.setLayout(new GridLayout(1,1,10,10));
}
actionPerformed方法的一部分应该确定JCombobox中的选择,并将正确的对象放入JList

@Override
public void actionPerformed(ActionEvent e) {
    JComboBox c = (JComboBox)e.getSource();
    String genre = (String)c.getSelectedItem();
    System.out.println(genre);

    vt = new Vector();
    ChannelList cl = new ChannelList();

    lchannels = new JList(vt);   
    lchannels.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    jp = new JScrollPane(lchannels);
    cl.createList();

    for(int i =0; i < cl.chList.length; i++){
        char chGenre = cl.chList[i].getChGenre();
        switch(genre){
        case "All Genres":
            vt.add(cl.chList[i].getChTitle());
            break;
        case "Entertainment":
            if(chGenre == 'e')
                vt.add(cl.chList[i].getChTitle());
            break;
        }
    }
}
运行程序时没有错误消息。actionPerformed打印字符串的第一部分工作正常,这是无用的。 但是,JList中没有显示结果

为了更清楚,以下是整个文件:

import javax.swing.*;
import java.awt.*;
import java.text.*;
import java.util.Vector;
import java.util.*;
import java.awt.event.*;
import javax.swing.border.*;
import java.util.*; 

public class AS4Temp extends JApplet implements ItemListener, ActionListener{
JPanel p,p1,p2;

JComboBox c;
JList lchannels;
JScrollPane jp;
Vector vt;
Container con;

public void init(){
    p = new JPanel();
    p.setLayout(new GridLayout(3,3,10,10));

    //Genre
    p1 = new JPanel();
    c = new JComboBox();
    c.addItem("Please Select Genre of Channel");
    c.addItem("All Genres");
    c.addItem("Entertainment");
    c.addItem("Movie");
    c.addItem("News/Business");
    c.addItem("Sci-Fi");
    c.addItem("Sports");

    c.addActionListener(this);

    p1.add(c);

    p1.setLayout(new FlowLayout());
    p1.setBorder(new TitledBorder("Channel Genre"));

    //Channels

    p2 = new JPanel();
    vt = new Vector();
    ChannelList cl = new ChannelList();

    lchannels = new JList(vt);   
    lchannels.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    jp = new JScrollPane(lchannels);
    cl.createList();
    /*
    for(int i =0; i < cl.chList.length; i++){
        char chGenre = cl.chList[i].getChGenre();
        if(chGenre == 'e')
        vt.add(cl.chList[i].getChTitle());
    }*/
    p2.add(jp);
    p2.setBorder(new TitledBorder("Channel Titles Available"));  
    p2.setLayout(new GridLayout(1,1,10,10));

    //all panels
    p.add(p1);
    p.add(p2);

    con = getContentPane();
    con.add(p);
}

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    JComboBox c = (JComboBox)e.getSource();
    String genre = (String)c.getSelectedItem();
    System.out.println(genre);

    ChannelList cl = new ChannelList();
    cl.createList();

    switch(genre){
    case "All Genres":
        for(int i =0; i < cl.chList.length; i++){
            char chGenre = cl.chList[i].getChGenre();
            vt.add(cl.chList[i].getChTitle());
        }
        break;
    case "Entertainment":
        for(int i =0; i < cl.chList.length; i++){
            char chGenre = cl.chList[i].getChGenre();
            if(chGenre == 'e')
                vt.add(cl.chList[i].getChTitle());
        }
        break;
    }

    /*
    for(int i =0; i < cl.chList.length; i++){
        char chGenre = cl.chList[i].getChGenre();
        switch(genre){
        case "All Genres":
            vt.add(cl.chList[i].getChTitle());
            break;
        case "Entertainment":
            if(chGenre == 'e')
                vt.add(cl.chList[i].getChTitle());
            break;
            }
        }*/
    }
}

问题是您正在actionPerformed上添加新的JList,但尚未将列表添加到容器中

lchannels = new JList(vt);   

您不需要在选择时添加新列表,只需在选择时更新列表模型本身。

问题是您正在添加关于actionPerformed的新JList,但尚未将列表添加到容器中

lchannels = new JList(vt);   

您无需在选择时添加新列表,只需在选择时更新列表模型本身。

我根据部分信息猜测,但我看到您正在创建新组件,包括新的JList和新的JScrollPane:

lchannels = new JList(vt);   
lchannels.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jp = new JScrollPane(lchannels);
但我看不到JScrollPane被添加到任何内容中,因此没有任何内容显示出来是有意义的

似乎您可能希望以非常不同的方式进行此操作,而不是创建新的JList和新的JScrollPane。。。您可能希望创建一个新的JList模型,并使用此新模型设置现有JList,或者只需更改现有JList模型持有的数据

考虑在actionPerformed方法内创建一个DefaultListModelField对象,比如调用listModel,调用AddElement…`以填充数据,然后调用

myList.setModel(listModel);
在现有和显示的JList上

例如,以下是我的:


我在这里是根据部分信息进行猜测的,但我看到您正在创建新组件,包括一个新的JList和一个新的JScrollPane:

lchannels = new JList(vt);   
lchannels.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jp = new JScrollPane(lchannels);
但我看不到JScrollPane被添加到任何内容中,因此没有任何内容显示出来是有意义的

似乎您可能希望以非常不同的方式进行此操作,而不是创建新的JList和新的JScrollPane。。。您可能希望创建一个新的JList模型,并使用此新模型设置现有JList,或者只需更改现有JList模型持有的数据

考虑在actionPerformed方法内创建一个DefaultListModelField对象,比如调用listModel,调用AddElement…`以填充数据,然后调用

myList.setModel(listModel);
在现有和显示的JList上

例如,以下是我的:


我认为您发布的代码和文本不足以让我们充分理解您的问题并回答它。如果你没有得到一个合理的答案,考虑创建和发布一个。不要创建一个新的JLIST,只需创建一个新的ListMod,并将其应用到现有的JLISTI上,不要认为你发布的代码和文本足以让我们能够充分理解你的问题来回答它。如果你没有得到一个像样的答案很快,考虑创建和张贴。不要创建一个新的JLIST,只需创建一个新的ListMod,并将其应用到现有JLIST,我真正需要的ActoRunPosiod方法只是从JCOMBOBOX获取StestDead项目,然后for for循环添加列表。重新声明这些控件和变量是为了修复循环中的错误。@hanab:那么您已经修复了问题?我删除了System.out.println和for循环之间不必要的部分,但仍然不知道如何显示JList。我正在学习如何使用DefaultListModelField对象。@hanabinoir:如果您仍然卡住了,请创建并发布到您的原始程序中,类似于我在上面创建和发布的代码。您还想查看我的ArrayList文件吗?实际上,我在ActionPerformance方法中真正需要的只是从JCombobox获取SelectedItem,和for循环来添加列表。重新声明这些控件和变量是为了修复循环中的错误。@hanab:那么您已经修复了问题?我删除了System.out.println和for循环之间不必要的部分,但仍然不知道如何显示JList。我正在学习如何使用DefaultListModelField对象。@hanabinoir:如果您仍然卡住了,请创建并发布到原始程序中,类似于我在上面创建和发布的代码。是否还要查看我的ArrayList文件?