问答题

本题的功能是对列表项的操作,包括删除、添加和反选。窗口中有两个列表框和5个按钮,按钮标签代表着移除列表项的方向,“>”代表只移除选中的列表项,“>>”代表移除所有的列表项,“!”代表反向选择列表项。
import jav
  • a.awt.*;
    import java.awt.event.*;
    class java3 extends Frame implements ActionListener&ItemListener
    final static int ITEMS=10;
    List ItList=new List(ITEMS,true);
    List rtList=new List(0,true);
    java3()
    super("java3");
    addWindowListener(new WindowAdapter()
    public void windowClosing(WindowEvent e)
    System.exit(0);
    );
    GridBagLayout gbl=new GridBagLayout();
    setLayout(gbl);
    add(ItList,0,0,1,5,1.0,1.0);
    add(rtList,2,0,1,5,1.0,1.0);
    ItList.addActionListener(this);
    ItList.addItemListener(this);
    rtList.addActionListener(this);
    rtList.addItemListener(this);
    Button b;
    add(b=new Button(">"),1,0,1,1,0,1.0);
  • b.addActionListener(this);
    add(b=new Button(">>"),1,1,1,1,0,1.0);b.addActionListener(this);
    add(b=new Button("<"),1,2,1,1,0,1.0);b.addActionListener(this);
    add(b=new Button("<<"),1,3,1,1,0,1.0);b.addActionListener(this);
    add(b=Flew Button("!"),1,4,1,1,0,1.0);b.addActionListener(this);
    for(int i=0;i<ITEMS;i++)
    ltList.add("item"+i);
    pack();
    show();
    void add(Component comp,
    int x,int y,int w,int h,double weightx,double weighty)
    GridBagLayout gbl=(GridBagLayout)getLayout();
    GridBagConstraints c=new GridBagConstraints();
  • c.fill=GridBagConstraints.BOTH;c.gridx=x;c.gridy=y;c.gridwidth=w;c.gridheight=h;c.weightx=weightx;c.weighty=weighty;
    add(comp);
    gbl.setConstraints(comp,c);
    void reverseSelections(List 1)
    for(int i=0;i<1.length();i++)
    if(l.isIndexSelected(i))
    l.deselect(i);
    else
    l.select(i);

    void deselectAll(List 1)
    for(int i=0;i<1.getItemCount();itt)
    l.deselect(i);

    void replaceItem(List 1,String item)
    for(int i=0;i<1.getItemCount();i+t)
    if(1.getItem(i).equals(item))
    l.replaceItem(item +"*",i);

    void move(List l1,List 12,boolean all)
    if(all)
    for(int i=0;i<l1.getItemCount();i++)
    l2.add(l1.getItem(i));
    l1.removeAll();
    else
    String[]items=l1.getSelectedItems();
    int[]itemIndexes=l1.getSelectedIndexes();
    deselectAll(l2);
    for(int i=0;i<items.length;i++)
    l2.add(items[i]);
    l2.select(l2.getItemCount()=1);
    if(i==0)
    l2.makeVisible(l2.getItemCount()=1);

    for(int i=itemIndexes.length-1;i>=0;i--)
    l1.remove(itemIndexes[i]);

    public void actionPerformed(ActionEvent evt)
    String arg=evt.getActionCommand();
    if(">".equals(arg))
    move(ltList,rtList,false);
    else if(">>".equals(arg))
    move(ltList,rtList,true);
    else if("<".equals(arg))
    move(rtList,ltList,false);
    else if("<<".equals(arg))
    move(rtList,ltList,true);
    else if("!".equals(arg))
    if(ltList.getSelectedItems().length>0)
    reverseSelections(ltList);
    else if(rtList.getSelectedItems().length>0)
    reverseSelections(rtList);
    else
    Object target=evt.getSource();
    if(target==rtList || target==ItList)
    replaceItem((List)target,arg);

    public void itemStatedChanged(ItemEvent ent)
    List target=(List)evt.getSource();
    if(target==ltList)
    deselectAll(rtList);
    else if(target==rtList)
    deselectAll(ltList);

    public static void main(String[]args)
    new java3();

【参考答案】

第1处:extends Frame implements ActionListener,ItemListener
......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)