友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

Java编程思想第4版[中文版](PDF格式)-第140章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




    ChoiceNew applet = new ChoiceNew();  

    Frame aFrame = new Frame(〃ChoiceNew〃);  

    aFrame。addWindowListener(  

      new WindowAdapter() {  

        public void windowClosing(WindowEvent e) {  

          System。exit(0);  

        }  

      });  

    aFrame。add(applet; BorderLayout。CENTER);  

    aFrame。setSize(750;100);  

    applet。init();  

    applet。start();  

    aFrame。setVisible(true);  

  }  

} ///:~  

  

这个程序中没什么特别新颖的东西(除了 Java 1。1 版的UI 类里少数几个值得关注的缺陷)。  

  

5。 列表  

我们消除了 Java 1。0 中List 设计的一个缺陷,就是 List 不能像我们希望的那样工作:它会与单击在一个列 

表元素上发生冲突。  

  

//: ListNew。java  

// Java 1。1 Lists are easier to use  

import java。awt。*;  



                                                                                          422 


…………………………………………………………Page 424……………………………………………………………

import java。awt。event。*;  

import java。applet。*;  

  

public class ListNew extends Applet {  

  String'' flavors = { 〃Chocolate〃; 〃Strawberry〃;  

    〃Vanilla Fudge Swirl〃; 〃Mint Chip〃;   

    〃Mocha Almond Fudge〃; 〃Rum Raisin〃;   

    〃Praline Cream〃; 〃Mud Pie〃 };  

  // Show 6 items; allow multiple selection:  

  List lst = new List(6; true);  

  TextArea t = new TextArea(flavors。length; 30);  

  Button b = new Button(〃test〃);  

  int count = 0;  

  public void init() {  

    t。setEditable(false);  

    for(int i = 0; i 《 4; i++)  

      lst。addItem(flavors'count++');  

    add(t);  

    add(lst);  

    add(b);  

    lst。addItemListener(new LL());  

    b。addActionListener(new BL());  

  }  

  class LL implements ItemListener {  

    public void itemStateChanged(ItemEvent e) {  

      t。setText(〃〃);  

      String'' items = lst。getSelectedItems();  

      for(int i = 0; i 《 items。length; i++)  

        t。append(items'i' + 〃n〃);  

    }  

  }  

  class BL implements ActionListener {  

    public void actionPerformed(ActionEvent e) {  

      if(count 《 flavors。length)  

        lst。addItem(flavors'count++'; 0);  

    }  

  }  

  public static void main(String'' args) {  

    ListNew applet = new ListNew();  

    Frame aFrame = new Frame(〃ListNew〃);  

    aFrame。addWindowListener(  

      new WindowAdapter() {  

        public void windowClosing(WindowEvent e) {  

          System。exit(0);  

        }  

      });  

    aFrame。add(applet; BorderLayout。CENTER);  

    aFrame。setSize(300;200);  

    applet。init();  

    applet。start();  

    aFrame。setVisible(true);  

  }  



                                                                                          423 


…………………………………………………………Page 425……………………………………………………………

} ///:~  

  

我们可以注意到在列表项中无需特别的逻辑需要去支持一个单击动作。我们正好像我们在其它地方所做的那 

样附加上一个接收器。  

  

6。 菜单  

为菜单处理事件看起来受益于 Java 1。1 版的事件模型,但 Java 生成菜单的方法常常麻烦并且需要一些手工 

编写代码。生成菜单的正确方法看起来像资源而不是一些代码。请牢牢记住编程工具会广泛地为我们处理创 

建的菜单,因此这可以减少我们的痛苦(只要它们会同样处理维护任务!)。另外,我们将发现菜单不支持 

并且将导致混乱的事件:菜单项使用ActionListeners (动作接收器),但复选框菜单项使用 ItemListeners 

 (项目接收器)。菜单对象同样能支持ActionListeners (动作接收器),但通常不那么有用。一般来说, 

我们会附加接收器到每个菜单项或复选框菜单项,但下面的例子(对先前例子的修改)演示了一个联合捕捉 

多个菜单组件到一个单独的接收器类的方法。正像我们将看到的,它或许不值得为这而激烈地争论。  

  

//: MenuNew。java  

// Menus in Java 1。1  

import java。awt。*;  

import java。awt。event。*;  

  

public class MenuNew extends Frame {  

  String'' flavors = { 〃Chocolate〃; 〃Strawberry〃;  

    〃Vanilla Fudge Swirl〃; 〃Mint Chip〃;   

    〃Mocha Almond Fudge〃; 〃Rum Raisin〃;   

    〃Praline Cream〃; 〃Mud Pie〃 };  

  TextField t = new TextField(〃No flavor〃; 30);  

  MenuBar mb1 = new MenuBar();  

  Menu f = new Menu(〃File〃);  

  Menu m = new Menu(〃Flavors〃);  

  Menu s = new Menu(〃Safety〃);  

  // Alternative approach:  

  CheckboxMenuItem'' safety = {  

    new CheckboxMenuItem(〃Guard〃);  

    new CheckboxMenuItem(〃Hide〃)  

  };  

  MenuItem'' file = {  

    // No menu shortcut:  

    new MenuItem(〃Open〃);  

    // Adding a menu shortcut is very simple:  

    new MenuItem(〃Exit〃;   

      new MenuShortcut(KeyEvent。VK_E))  

  };  

  // A second menu bar to swap to:  

  MenuBar mb2 = new MenuBar();  

  Menu fooBar = new Menu(〃fooBar〃);  

  MenuItem'' other = {  

    new MenuItem(〃Foo〃);  

    new MenuItem(〃Bar〃);  

    new MenuItem(〃Baz〃);  

  };  

  // Initialization code:  

  {  

    ML ml = new ML();  



                                                                                          424 


…………………………………………………………Page 426……………………………………………………………

    CMIL cmil = new CMIL();  

    safety'0'。setActionmand(〃Guard〃);  

    safety'0'。addItemListener(cmil);  

    safety'1'。setActionmand(〃Hide〃);  

    safety'1'。addItemListener(cmil);  

    file'0'。setActionmand(〃Open〃);  

    file'0'。addActionListener(ml);  

    file'1'。setActionmand(〃Exit〃);  

    file'1'。addActionListener(ml);  

    other'0'。addActionListener(new FooL());  

    other'1'。addActionListener(new BarL());  

    other'2'。addActionListener(new BazL());  

  }  

  Button b = new Button(〃Swap Menus〃);  

  public MenuNew() {  

    FL fl = new FL();  

    for(int i = 0; i 《 flavors。length; i++) {  

      MenuItem mi = new MenuItem(flavors'i');  

      mi。addActionListener(fl);  

      m。add(mi);  

      // Add separators at intervals:  

      if((i+1) % 3 == 0)   

        m。addSeparator();  

    }  

    for(int i = 0; i 《 safety。length; i++)  

      s。add(safety'i');  

    f。add(s);  

    for(int i = 0; i 《 file。length; i++)  

      f。add(file'i');  

    mb1。add(f);  

    mb1。add(m);  

    setMenuBar(mb1);  

    t。setEditable(false);  

    add(t; BorderLayout。CENTER);  

    // Set up the system for swapping menus:  

    b。addActionListener(new BL());  

    add(b; BorderLayout。NORTH);  

    for(int i = 0; i 《 other。length; i++)  

      fooBar。add(other'i');  

    mb2。add(fooBar);  

  }  

  class BL implements ActionListener {  

    public void actionPerformed(ActionEvent e) {  

      MenuBar m = getMenuBar();  

      if(m == mb1) setMenuBar(mb2);  

      else if (m == mb2) setMenuBar(mb1);  

    }  

  }  

  class ML implements ActionListener {  

    public void actionPerformed(ActionEvent e) {  

      MenuItem target = (MenuItem)e。getSource();  

      String actionmand =   



                                                                                        425 


…………………………………………………………Page 427……………………………………………………………

        target。getActionmand();  

      if(actionmand。equals(〃Open〃)) {  

        String s = t。getText();  

        boolean chosen = false;  

        for(int i = 0; i 《 flavors。length; i++)  

          if(s。equals(flavors'i')) chosen = true;  

        if(!chosen)  

          t。setText(〃Choose a flavor first!〃);  

        else  

          t。setText(〃Opening 〃+ s +〃。 Mmm; mm!〃);  

      } else if(actionmand。equals(〃Exit〃)) {  

        dispatchEvent(  

          new WindowEvent(MenuNew。this;   

            WindowEvent。WINDOW_CLOSING));  

      }  

    }  

  }  

  class FL implements ActionListener {  

    public void actionPerformed(ActionEvent e) {  

      MenuItem target = (MenuItem)e。getSource();  

      t。setText(target。getLabel());  

    }  

  }  

  // Alternatively; you can create a different  

  // class for each different MenuItem。 Then you  

  // Don't have to figure out which one it is:  

  class FooL implements ActionListener {  

    public void actionPerformed(ActionEvent e) {  

      t。setText(〃Foo selected〃);  

    }  

  }  
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!