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

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

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




public class Popup extends JPanel {  

  JPopupMenu popup = new JPopupMenu();  

  JTextField t = new JTextField(10);  

  public Popup() {  

    add(t);  

    ActionListener al = new ActionListener () {  

      public void actionPerformed(ActionEvent e){  

        t。setText(  

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

      }  

    };  

    JMenuItem m = new JMenuItem(〃Hither〃);  

    m。addActionListener(al);  

    popup。add(m);  

    m = new JMenuItem(〃Yon〃) ;  

    m。addActionListener(al);  

    popup。add(m);  

    m = new JMenuItem(〃Afar〃);  

    m。addActionListener(al);  

    popup。add(m);  

    popup。addSeparator();  

    m = new JMenuItem(〃Stay Here〃);  

    m。addActionListener(al);  

    popup。add(m);  

    PopupListener pl = new PopupListener();  

    addMouseListener(pl);  

    t。addMouseListener(pl);  

  }  

  class PopupListener extends MouseAdapter {  

    public void mousePressed(MouseEvent e) {  

      maybeShowPopup(e);  

    }  

    public void mouseReleased(MouseEvent e) {  

      maybeShowPopup(e);  

    }  

    private void maybeShowPopup(MouseEvent e) {  

      if(e。isPopupTrigger()) {  

        popup。show(  

          e。getponent(); e。getX(); e。getY());  

      }  

    }  

  }  

  public static void main(String args'') {  

    Show。inFrame(new Popup();200;150);  

  }  

} ///:~  

  

相同的ActionListener 被加入每个 JMenuItem 中,使其能从菜单标签中取出文字,并将文字插入 

JTextField。  



                                                                                          478 


…………………………………………………………Page 480……………………………………………………………

13。19。11 列表框和组合框  



列表框和组合框在 Swing 中工作就像它们在老的AWT 中工作一样,但如果我们需要它,它们同样被增加功 

能。另外,它也更加的方便易用。例如,JList 中有一个显示String 数组的构建器(奇怪的是同样的功能在 

JboBox 中无效!)。下面的例子显示了它们基本的用法。  

  

//: Listbo。java  

// List boxes & bo boxes  

package c13。swing;  

import java。awt。*;  

import java。awt。event。*;  

import javax。swing。*;  

  

public class Listbo extends JPanel {  

  public Listbo() {  

    setLayout(new GridLayout(2;1));  

    JList list = new JList(ButtonGroups。ids);  

    add(new JScrollPane(list));  

    JboBox bo = new JboBox();  

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

      bo。addItem(Integer。toString(i));  

    add(bo);  

  }  

  public static void main(String args'') {  

    Show。inFrame(new Listbo();200;200);  

  }  

} ///:~  

  

最开始的时候,似乎有点儿古怪的一种情况是 JLists 居然不能自动提供滚动特性——即使那也许正是我们一 

直所期望的。增加对滚动的支持变得十分容易,就像上面示范的一样——简单地将JList 封装到 

JScrollPane 即可,所有的细节都自动地为我们照料到了。  



13。19。12 滑杆和进度指示条  



滑杆用户能用一个滑块的来回移动来输入数据,在很多情况下显得很直观(如声音控制)。进程条从“空” 

到“满”显示相关数据的状态,因此用户得到了一个状态的透视。我最喜爱的有关这的程序例子简单地将滑 

动块同进程条挂接起来,所以当我们移动滑动块时,进程条也相应的改变:  

  

//: Progress。java  

// Using progress bars and sliders  

package c13。swing;  

import java。awt。*;  

import java。awt。event。*;  

import javax。swing。*;  

import javax。swing。event。*;  

import javax。swing。border。*;  

  

public class Progress extends JPanel {  

  JProgressBar pb = new JProgressBar();  

  JSlider sb =   

    new JSlider(JSlider。HORIZONTAL; 0; 100; 60);  

  public Progress() {  

    setLayout(new GridLayout(2;1));  



                                                                                          479 


…………………………………………………………Page 481……………………………………………………………

    add(pb);  

    sb。setValue(0);  

    sb。setPaintTicks(true);  

    sb。setMajorTickSpacing(20);  

    sb。setMinorTickSpacing(5);  

    sb。setBorder(new TitledBorder(〃Slide Me〃));  

    pb。setModel(sb。getModel()); // Share model  

    add(sb);  

  }  

  public static void main(String args'') {  

    Show。inFrame(new Progress();200;150);  

  }  

} ///:~  

  

JProgressBar 十分简单,但 JSlider 却有许多选项,例如方法、大或小的记号标签。注意增加一个带标题的 

边框是多么的容易。  



13。19。13 树  



使用一个JTree 可以简单地像下面这样表示:  

add(new JTree(  

new Object'' {〃this〃; 〃that〃; 〃other〃}));  

这个程序显示了一个原始的树状物。树状物的 API 是非常巨大的,可是——当然是在Swing 中的巨大。它表 

明我们可以做有关树状物的任何事,但更复杂的任务可能需要不少的研究和试验。幸运的是,在库中提供了 

一个妥协:“默认的”树状物组件,通常那是我们所需要的。因此大多数的时间我们可以利用这些组件,并 

且只在特殊的情况下我们需要更深入的研究和理解。  

下面的例子使用了“默认”的树状物组件在一个程序片中显示一个树状物。当我们按下按钮时,一个新的子 

树就被增加到当前选中的结点下(如果没有结点被选中,就用根结节):  

  

//: Trees。java  

// Simple Swing tree example。 Trees can be made  

// vastly more plex than this。  

package c13。swing;  

import java。awt。*;  

import java。awt。event。*;  

import javax。swing。*;  

import javax。swing。tree。*;  

  

// Takes an array of Strings and makes the first  

// element a node and the rest leaves:  

class Branch {  

  DefaultMutableTreeNode r;  

  public Branch(String'' data) {  

    r = new DefaultMutableTreeNode(data'0');  

    for(int i = 1; i 《 data。length; i++)  

      r。add(new DefaultMutableTreeNode(data'i'));  

  }  

  public DefaultMutableTreeNode node() {   

    return r;   

  }  

}    

  

public class Trees extends JPanel {  



                                                                                           480 


…………………………………………………………Page 482……………………………………………………………

  String'''' data = {  

    { 〃Colors〃; 〃Red〃; 〃Blue〃; 〃Green〃 };  

    { 〃Flavors〃; 〃Tart〃; 〃Sweet〃; 〃Bland〃 };  

    { 〃Length〃; 〃Short〃; 〃Medium〃; 〃Long〃 };  

    { 〃Volume〃; 〃High〃; 〃Medium〃; 〃Low〃 };  

    { 〃Temperature〃; 〃High〃; 〃Medium〃; 〃Low〃 };  

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