使用在java桌面应用程序中加入了一个List控件,在list控件中用一个for循环list.add("...."),当鼠标点击每个Item时弹出一个子窗口(用Dialog实现),当我点击桌面应用程序中的一个按钮时重新给List赋值,重新产生了list中的Item的值,当鼠标再次点击一个Item时先弹出第一次的对应顺序Item是的子窗口,当子窗口消逝后才弹出那个正确的那个子窗口,当点击桌面应用程序中的另外一个按钮时重新又给List赋值,重新产生了list中的Item的值,当鼠标再次点击一个Item时先弹出第一次的对应顺序Item是的子窗口,当子窗口消逝后弹出第二次的对应顺序Item是的子窗口,当子窗口消逝后才弹出那个正确的那个子窗口。是什么问题呢,我想是不是选择item的鼠标监听没有释放掉,应该怎么做呢?请指点

解决方案 »

  1.   

    list.addSelectionListener的代码:
    list.addSelectionListener(new SelectionListener()
    {
    public void widgetSelected(SelectionEvent event){


    WebserveBaseInfo webserviceliserinfosub = new WebserveBaseInfo();
    ArrayList listTVlistinfoselect = null;
    try {
    listTVlistinfoselect = webserviceliserinfosub.getTvlist(webserviceinfo.getRequestinputvalue()[0]);
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    String selectid[] = new String[listTVlistinfoselect.size()*2];//视频的ID
    String TvVedioImagepath[] = new String[listTVlistinfoselect.size()*2];//视频图片路径
    String Tvname[] = new String[listTVlistinfoselect.size()*2];//片名
    String mainman[] = new String[listTVlistinfoselect.size()*2];//主演
    String TvCount[] = new String[listTVlistinfoselect.size()*2];//主演
    for(int TVcountsub = 0;TVcountsub < listTVlistinfoselect.size();TVcountsub++){
    TVListInfo tvlistinfosub = (TVListInfo)listTVlistinfoselect.get(TVcountsub);
    selectid[TVcountsub*2] = "";
    Tvname[TVcountsub*2] = "";
    mainman[TVcountsub*2] = "";
    TvCount[TVcountsub*2] = "";
    TvVedioImagepath[TVcountsub*2] = "";
    ///System.out.println ("tvlistinfosub.getPlyListID():"+tvlistinfosub.getPlyListID());
    selectid[TVcountsub*2+1] = tvlistinfosub.getPlyListID();
    Tvname[TVcountsub*2+1] = tvlistinfosub.getVName();
    mainman[TVcountsub*2+1] = tvlistinfosub.getDirector();
    TvCount[TVcountsub*2+1] = tvlistinfosub.getContent();
    TvVedioImagepath[TVcountsub*2+1] = tvlistinfosub.getImgPath();
    }


    int listselections[] = list.getSelectionIndices ( );
    String outText = "";
    for (int loopIndex = 0; loopIndex < listselections.length; loopIndex++) {
    outText += listselections[loopIndex];
    System.out.println("AAAAA:"+outText);
    //outText = listselections[loopIndex];
    }
    if(Tvname[Integer.parseInt(outText.trim())].trim().equals("")&& Tvname[Integer.parseInt(outText.trim())] == null || selectid[Integer.parseInt(outText.trim())].trim().equals("") ||selectid[Integer.parseInt(outText.trim())] == null ){

    }else{
    if(!selectid[Integer.parseInt(outText.trim())].trim().equals("")|| selectid[Integer.parseInt(outText.trim())]!= null ){
    MovieInfoNew movidinfo = new MovieInfoNew(shell);
    movidinfo.setMainman(mainman[Integer.parseInt(outText.trim())]);
    movidinfo.setTvname(Tvname[Integer.parseInt(outText.trim())]);
    movidinfo.setTvVediopath(TvVedioImagepath[Integer.parseInt(outText.trim())]);
    movidinfo.setTvCount(TvCount[Integer.parseInt(outText.trim())]);
    java.awt.Point mousePoint = MouseInfo.getPointerInfo().getLocation(); 
    movidinfo.setShellx(event.x+mousePoint.x);
    movidinfo.setShelly(event.y+mousePoint.y);
    movidinfo.open();
    }

    }

    //System.out.println ("You selected: " + outText);
    //System.out.println ("You selected id value is: " + selectid[Integer.parseInt(outText.trim())]);
    }

    public void widgetDefaultSelected(SelectionEvent event)
    {
    /**
    System.out.println ("BBBBBBBBBBBBBBBBBBBBBB");
    int [] selections = list.getSelectionIndices ( );
    String outText = "";
    for (int loopIndex = 0; loopIndex < selections.length; loopIndex++) {
    outText += selections[loopIndex] + " ";
    }
    System.out.println ("You selected: " + outText);
    */
    }


    });
      

  2.   

    这个问题经过一天的修改与测试,发现同一个控件中不能有多个相同的鼠标事件,出现这样的问题主要是因为我在同一个List控件中加入了两个相同的鼠标事件。
    请进入此贴者踊跃讨论这个问题。
      

  3.   

    搞不懂为什么会产生多余的鼠标事件
    public class Test1 extends JFrame{
    JList list;
    JButton btn;

    public Test1(){
    list = new JList(new String[]{"aa","bb","cc"});
    btn = new JButton("update");
    add(list,"Center");
    add(btn,BorderLayout.SOUTH);
    pack();
    setSize(400,300);
    setVisible(true);

    btn.addActionListener(new ActionListener(){ @Override
    public void actionPerformed(ActionEvent e) {
    list.setListData(new String[]{"dd","ee","ff"});
    }});

    list.addListSelectionListener(new ListSelectionListener(){ @Override
    public void valueChanged(ListSelectionEvent e) {
    javax.swing.JOptionPane.showMessageDialog(null, list.getSelectedValue());
    }});

    }

    public static void main(String[] args) {
    new Test1();
    }}