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

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

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




调用newInstance() ,通过它一个数组对象包含我们当前的自变量——在这种例子中,就是 ids 数组中的字 

符串。  

这样增加了一些更复杂的内容到这个简单的程序中。为了使“异或”行为拥有按钮,我们创建一个按钮组并 

增加每个按钮到我们所需的组中。当我们运行这个程序时,我们会注意到所有的按钮除了JButton 都会向我 

们展示“异或”行为。  



13。19。8  图标  



我们可在一个JLable 或从AbstractButton 处继承的任何事物中使用一个图标(包括 JButton,JCheckbox , 

JradioButton 及不同类型的 JMenuItem)。利用JLables 的图标十分的简单容易(我们会在随后的一个程序例 



                                                                                          472 


…………………………………………………………Page 474……………………………………………………………

子中看到)。下面的程序例子探索了我们可以利用按钮的图标和它们的衍生物的其它所有方法。  

我们可以使用任何我们需要的 GIF 文件,但在这个例子中使用的这个 GIF 文件是这本书编码发行的一部分, 

可以在BruceEckel。 处下载来使用。为了打开一个文件和随之带来的图像,简单地创建一个图标并分 

配它文件名。从那时起,我们可以在程序中使用这个产生的图标。  

  

//: Faces。java  

// Icon behavior in JButtons  

package c13。swing;  

import java。awt。*;  

import java。awt。event。*;  

import javax。swing。*;  

  

public class Faces extends JPanel {  

  static Icon'' faces = {  

    new ImageIcon(〃face0。gif〃);  

    new ImageIcon(〃face1。gif〃);  

    new ImageIcon(〃face2。gif〃);  

    new ImageIcon(〃face3。gif〃);  

    new ImageIcon(〃face4。gif〃);  

  };  

  JButton   

    jb = new JButton(〃JButton〃; faces'3');   

    jb2 = new JButton(〃Disable〃);  

  boolean mad = false;  

  public Faces() {  

    jb。addActionListener(new ActionListener() {  

      public void actionPerformed(ActionEvent e){  

        if(mad) {  

          jb。setIcon(faces'3');  

          mad = false;  

        } else {  

          jb。setIcon(faces'0');  

          mad = true;  

        }  

        jb。setVerticalAlignment(JButton。TOP);  

        jb。setHorizontalAlignment(JButton。LEFT);  

      }  

    });  

    jb。setRolloverEnabled(true);  

    jb。setRolloverIcon(faces'1');  

    jb。setPressedIcon(faces'2');  

    jb。setDisabledIcon(faces'4');  

    jb。setToolTipText(〃Yow!〃);  

    add(jb);  

    jb2。addActionListener(new ActionListener() {  

      public void actionPerformed(ActionEvent e){  

        if(jb。isEnabled()) {  

          jb。setEnabled(false);  

          jb2。setText(〃Enable〃);  

        } else {  

          jb。setEnabled(true);  

          jb2。setText(〃Disable〃);  



                                                                                          473 


…………………………………………………………Page 475……………………………………………………………

        }  

      }  

    });  

    add(jb2);  

  }  

  public static void main(String args'') {  

    Show。inFrame(new Faces(); 300; 200);  

  }  

} ///:~  

  

一个图标可以在许多的构建器中使用,但我们可以使用setIcon()方法增加或更换图标。这个例子同样展示 

了当事件发生在JButton (或者一些AbstractButton)上时,为什么它可以设置各种各样的显示图标:当 

JButton 被按下时,当它被失效时,或者“滚过”时(鼠标从它上面移动过但并不击它)。我们会注意到那 

给了按钮一种动画的感觉。  

注意工具提示条也同样增加到按钮中。  



13。19。9 菜单  



菜单在 Swing 中做了重要的改进并且更加的灵活——例如,我们可以在几乎程序中任何地方使用他们,包括 

在面板和程序片中。语法同它们在老的AWT 中是一样的,并且这样使出现在老AWT 的在新的Swing 也出现 

了:我们必须为我们的菜单艰难地编写代码,并且有一些不再作为资源支持菜单(其它事件中的一些将使它 

们更易转换成其它的编程语言)。另外,菜单代码相当的冗长,有时还有一些混乱。下面的方法是放置所有 

的关于每个菜单的信息到对象的二维数组里(这种方法可以放置我们想处理的任何事物到数组里),这种方 

法在解决这个问题方面领先了一步。这个二维数组被菜单所创建,因此它首先表示出菜单名,并在剩余的列 

中表示菜单项和它们的特性。我们会注意到数组列不必保持一致——只要我们的代码知道将发生的一切事 

件,每一列都可以完全不同。  

  

//: Menus。java  

// A menu…building system; also demonstrates  

// icons in labels and menu items。  

package c13。swing;  

import java。awt。*;  

import java。awt。event。*;  

import javax。swing。*;  

  

public class Menus extends JPanel {  

  static final Boolean  

    bT = new Boolean(true);   

    bF = new Boolean(false);  

  // Dummy class to create type identifiers:  

  static class MType { MType(int i) {} };  

  static final MType  

    mi = new MType(1); // Normal menu item  

    cb = new MType(2); // Checkbox menu item  

    rb = new MType(3); // Radio button menu item  

  JTextField t = new JTextField(10);  

  JLabel l = new JLabel(〃Icon Selected〃;   

    Faces。faces'0'; JLabel。CENTER);  

  ActionListener a1 = new ActionListener() {  

    public void actionPerformed(ActionEvent e) {  

      t。setText(  

        ((JMenuItem)e。getSource())。getText());  

    }  



                                                                                          474 


…………………………………………………………Page 476……………………………………………………………

  };  

  ActionListener a2 = new ActionListener() {  

    public void actionPerformed(ActionEvent e) {  

      JMenuItem mi = (JMenuItem)e。getSource();  

      l。setText(mi。getText());  

      l。setIcon(mi。getIcon());  

    }  

  };  

  // Store menu data as 〃resources〃:  

  public Object'''' fileMenu = {  

    // Menu name and accelerator:  

    { 〃File〃; new Character('F') };  

    // Name type accel listener enabled  

    { 〃New〃; mi; new Character('N'); a1; bT };  

    { 〃Open〃; mi; new Character('O'); a1; bT };  

    { 〃Save〃; mi; new Character('S'); a1; bF };  

    { 〃Save As〃; mi; new Character('A'); a1; bF};  

    { null }; // Separator  

    { 〃Exit〃; mi; new Character('x'); a1; bT };  

  };  

  public Object'''' editMenu = {  

    // Menu name:  

    { 〃Edit〃; new Character('E') };  

    // Name type accel listener enabled  

    { 〃Cut〃; mi; new Character('t'); a1; bT };  

    { 〃Copy〃; mi; new Character('C'); a1; bT };  

    { 〃Paste〃; mi; new Character('P'); a1; bT };  

    { null }; // Separator  

    { 〃Select All〃; mi;new Character('l');a1;bT};  

  };  

  public Object'''' helpMenu = {  

    // Menu name:  

    { 〃Help〃; new Character('H') };  

    // Name type accel listener enabled  

    { 〃Index〃; mi; new Character('I'); a1; bT };  

    { 〃Using help〃; mi;new Character('U');a1;bT};  

    { null }; // Separator  

    { 〃About〃; mi; new Character('t'); a1; bT };  

  };  

  public Object'''' optionMenu = {  

    // Menu name:  

    { 〃Options〃; new Character('O') };  

    // Name type accel listener enabled  

    { 〃Option 1〃; cb; new Character('1'); a1;bT};  

    { 〃Option 2〃; cb; new Character('2'); a1;bT};  

  };  

  public Object'''' faceMenu = {  

    // Menu name:  

    { 〃Faces〃; new Character('a') };  

    // Optinal last element is icon  

    { 〃Face 0〃; rb; new Character('0'); a2; bT;   

      Faces。faces'0' };  



                                                                                       475 


…………………………………………………………Page 477……………………………………………………………

    { 〃Face 1〃; rb; new Character('1'); a2; bT;   

      Faces。faces'1' };  

    { 〃Face 2〃; rb; new Character('2'); a2; bT;   

      Faces。faces'2' };  

    { 〃Face 3〃; rb; new Character('3'); a2; bT;   

      Faces。faces'3' };  

    { 〃Face 4〃; rb; new Character('4'); a2; bT;   

      Faces。faces'4' };  

  };  

  public Object'' menuBar = {  

    fileMenu; editMenu; faceMenu;   

    optionMenu; helpMenu;  

  };  

  static public JMenuBar  

  createMenuBar(Object'' menuBarData) {  

    JMenuBar menuBar = new JMenuBar();  

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

      menuBar。add(  

        createMenu((Object'''')menuBarData'i'));  

    return menuBar;  

  }  

  static ButtonGroup bgroup;  

  static public JMenu   

  createMenu(Object'''' menuData) {  

    JMenu menu = new JMenu();  

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