mouseListener让我的JList表现得很奇怪

时间:2014-11-21 14:35:18

标签: java jlist mouselistener

我有一个加载了Object的JList有它的ListCellRenderer和mouseListener,这里是代码:

MyListCellRenderer:

public class MyListCellRenderer extends DefaultListCellRenderer {

        @Override
        public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            Component cell = null;

            if (value instanceof Domain) {
                Domain domain = (Domain)value;
                int status = domain.getStatus();
                String naziv = domain.getNaziv();

                cell = super.getListCellRendererComponent(list,naziv,index, isSelected, cellHasFocus);

                if (status == 4 & !isSelected) { 
                    cell.setBackground( Color.red );
                    cell.setForeground(Color.WHITE);
                }
            }

        return cell;
    }
  }

JList的:

 DefaultListModel<Domain> modelRN = new DefaultListModel<Domain>();

JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(10, 86, 390, 199);
        contentPane.add(scrollPane);
        JList<Domain> listRN = new JList<Domain>(modelRN);
        scrollPane.setViewportView(listRN);
        listRN.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
        listRN.setSelectionModel(m);
        listRN.setCellRenderer( new MyListCellRenderer());

域类:

public class Domain {

    private Integer id;
    private String naziv;
    private Integer status;

    public Domain(){}

    public Integer getId() {return id;}
    public void setId(int i){id = i;}

    public String getNaziv(){return naziv;}
    public void setNaziv(String n){naziv = n;}

    public Integer getStatus(){return status;}
    public void setStatus(int s){status = s;}

    public String toString(){return naziv; }
}

这就是设置。我在做什么是从数据库获取数据并将其加载到JList。下一步是当我点击列表中的一行时,我希望另一个Jlist从数据库加载相应的字段。

一切都很好。我在终端上得到了正确的值,但是当我尝试将值加载到另一个JList时,第一个触发该作业的行为就表现得很奇怪。我的意思是表现奇怪的是以下内容。附加了mouseListener的列表中包含9个Domain元素(它只显示Domain.getName())。当我做出选择(一次点击)时,我在第二个Jlist中加载了正确的数据,但是选择标记自己在第一个中移动。它移动了一个点,它发生了9次,我不知道为什么会这样。

这是听众代码:

MouseListener mouseListener = new MouseAdapter() {
             public void mouseClicked(MouseEvent e) {
                 if (e.getClickCount() == 1) {
                      d = listRN.getSelectedValue();  //getting the object from the first list
                        System.out.println(d.getNaziv());
                  }
                 //RN-->>PL
                ArrayList<Domain>  x = new DBsearch(d).Conn();
                  modelPL.clear();
                 for(int i=0;i<x.size();i++){
                     modelPL.addElement(x.get(i));    //adding to second List
                     System.out.println(x.get(i).getNaziv());
                 }  
             }
         };

         listRN.addMouseListener(mouseListener); 

有没有人知道这里发生了什么?感谢

0 个答案:

没有答案