有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java mouseListener让我的JList表现得很奇怪

我有一个加载了Object的JList,它有ListCellRenderer和MouseStener,下面是代码:

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时,触发作业的第一个JList的行为很奇怪。我所说的奇怪行为的意思如下。附加了mouseListener的列表中有9个域元素(它只显示Domain.getName()。当我进行选择(单击一次)时,我会在加载的第二个Jlist中获得正确的数据,但选择标记会自动在第一个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) 个答案