我有一个加载了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);
有没有人知道这里发生了什么?感谢