import java.awt.*;
import java.awt.event.*;public class TaskList extends Frame implements ActionListener
{
private Button b1 = new Button("确定");
private Button b2 = new Button("删除");
private Button b3 = new Button("增加优先级");
private Button b4 = new Button("降低优先级");
private TextField text = new TextField(15); private List list = new List();
private Label task_label = new Label("工作事项");
private Label priority_label = new Label("改变事件优先级");
private class WindowCloser extends WindowAdapter
{
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
}
public void setup(){
Panel p = new Panel(new FlowLayout());
p.add(b1);
p.add(b2);
Panel q = new Panel(new FlowLayout());
q.add(b3);
q.add(priority_label);
q.add(b4);
Panel r = new Panel(new FlowLayout());
r.add(task_label);
r.add(text);
setLayout(new GridLayout(4,1));
add(r);
add(q);
add(list);
add(p);
}
public TaskList(){
super("工作事项表");
this.setup();
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
list.addActionListener(this);
addWindowListener(new WindowCloser());
pack();
setVisible(true);
} private void handleAdd(String s){
list.add(s);
list.select(list.getItemCount()-1);
text.setText(" ");
}
private void handleDel(int position){
list.remove(position);
list.select(position);
}
private void handleup(int position){
  String s = list.getItem(position);
  list.remove(position);
  list.add(s,position-1);
  list.select(position-1);
}
private void handledown(int position){
if(position<list.getItemCount()-1){
String item = list.getItem(position);
list.remove(position);
list.add(item,position+1);
list.select(position+1);
}
}
public void actionPerformed(ActionEvent e){
if((e.getSource()==b1)&&(!text.getText().equals(" ")))
handleAdd(text.getText().trim());
else if((e.getSource()==b2)&&(list.getSelectedIndex()>=0))
handleDel(list.getSelectedIndex());
else if((e.getSource()==b3)&&(list.getSelectedIndex()>0))
handleup(list.getSelectedIndex());
else if((e.getSource()==b4)&&(list.getSelectedIndex()>=0))
handledown(list.getSelectedIndex());
else if((e.getSource()==list))
text.setText(list.getSelectedItem());
text.requestFocus();
} public static void main(String[] args){
TaskList t = new TaskList();
}
}请问,方法handleDown中的位置参数是4,而总事件数是5,那么position<list.getItemCount()-1应该不成立,而if主体部分应该不会执行啊!可是,结果看起来很正常啊?请教原因!

解决方案 »

  1.   

    list.getSelectedItem()是从0开始,而list.getItemCount()是从1开始
      象你说的那种是,position是3,list.getItemCount()是5, 输出一下就知道了!
      

  2.   

    调试了一下
    没有出现楼主所说的问题啊??
    handledown(list.getSelectedIndex());
    这一句中的
    getSelectedIndex方法返回的值是从0开始计数的
    getItemCount()获取列表中的项数
      

  3.   

    private List list = new List();让我纳闷了老半天,我一直在想怎么util包下的List还能list.addActionListener(this);
    后来恍然大悟原来是JList列表框,以前都不知道awt下的列表框叫List,太垃圾了
      

  4.   

    打印下不就知道了 private void handledown(int position){
                System.out.println("position :"+position);
                System.out.println("ItemCount - 1:"+list.getItemCount()-1);
            if(position<list.getItemCount()-1){
                String item = list.getItem(position);
                list.remove(position);
                list.add(item,position+1);
                list.select(position+1);
            }
        }
      

  5.   

    getItemCount() 这个是列表中一共有多少项...没有的话是0
    getSelectedIndex() 这个是你选中才会有具体第几个,未选中状态是-1...选中第1个的话是从1开始..