日期:2014-05-20  浏览次数:20765 次

ArrayList 问题 100
public   void   selectName(String   n)throws   ClassNotFoundException{
try{
SQL= "select   assetid,asset_name,model,price,purchase_date,status   from   asset   where   asset_name= ' "+n+ "   ' ";
dc=new   DbConn();
con=dc.getCon();
st=con.createStatement();
ResultSet   rs=st.executeQuery(SQL);
list=new   ArrayList <TCardModel> ();
while(rs.next()){
tcm=new   TCardModel(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getDouble(4),rs.getString(5),rs.getString(6));
list.add(tcm);
j++;
}
if(j==0){
JOptionPane.showMessageDialog(null, "相关数据不存在 ", "error! ",JOptionPane.INFORMATION_MESSAGE);
}
else{
iter=list.listIterator();
tcm=(TCardModel)iter.next();
//tcm=list.get(2);
TCard.label2.setText(tcm.getAssetid());
TCard.label4.setText(tcm.getAsset_name());
TCard.label6.setText(tcm.getModel());
TCard.label8.setText(tcm.getPrice());
TCard.label10.setText(tcm.getPurchase_date());
TCard.label12.setText(tcm.getStatus());
if(iter.hasNext())
{
System.out.println( "有多条记录 ");
//TCard.nextbtn.setEnabled(true);
//TCard.proviousbtn.setEnabled(true);
}
}
}
catch(SQLException   sqle){
System.err.println(sqle);
}
}
public   void   next(){
if(iter.hasNext())
{
tcm=(TCardModel)iter.next();
TCard.label2.setText(tcm.getAssetid());
TCard.label4.setText(tcm.getAsset_name());
TCard.label6.setText(tcm.getModel());
TCard.label8.setText(tcm.getPrice());
TCard.label10.setText(tcm.getPurchase_date());
TCard.label12.setText(tcm.getStatus());
}else{System.out.println( "最后纪录 ");}
}
public   void   provious(){
if(iter.hasPrevious()){
tcm=(TCardModel)iter.previous();
TCard.label2.setText(tcm.getAssetid());
TCard.label4.setText(tcm.getAsset_name());
TCard.label6.setText(tcm.getModel());
TCard.label8.setText(tcm.getPrice());
TCard.label10.setText(tcm.getPurchase_date());
TCard.label12.setText(tcm.getStatus());
}
}
现在有两个按键对应这两个方法   分别实现   list内部上下滚动的功能   现在用next()能正常实现功能   但是provious却出现了问题   调用一次pro方法的时候iter.nextIndex()能改变   但是输出的信息却不变   第二次点击才会改变   谁能告诉我解决的方法   点击一次就能正常达到我想要的目的

------解决方案--------------------
看者好象没有问题啊
------解决方案--------------------
交替调用时返回相同的元素
------解决方案--------------------
ListIterator.previous()方法没有问题,而是你使用的问题.

在ListIterator中,由nextIndex变量来指示下一个next()要读取的元素位置,previousIndex来指示下一个previous()要读取的元素位置,nextIndex和previousIndex有关系:

nextIndex = previousIndex + 1

假设当前nextIndex = i, previousIndex = i - 1, 当你调用next()时,返回第i个元素,此时nextIndex = i + 1, previousIndex = i. 当你立即调用previous()时,很显然会返回第i个元素,然后nextIndex = i, previousIndex = i - 1;

所以就出现了你描述的问题,这个问题只出现在由next()转入previous()或previous()转入next()的时候.当连续调用previous()或next()的时候是没有问题的.