java--100个Java经典例子(11-20)初学者的利器高手的宝典JavaSE

package test11;  
  
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import java.awt.event.KeyEvent;  
  
import javax.swing.AbstractButton;  
import javax.swing.ImageIcon;  
import javax.swing.JButton;  
import javax.swing.JFrame;  
import javax.swing.JPanel;  
  
/** 
 * Title: 按钮演示 
 * Description: 提供一个按钮的演示。如何实现按钮和是一个按钮失效 
 * Filename:  
 */  
public class ButtonDemo extends JPanel  
                        implements ActionListener {  
      
    private static final long serialVersionUID = 1L;  
    protected JButton b1, b2, b3;  
/** 
 *方法说明:构造器,初始图形界面构建 
 */  
    public ButtonDemo() {  
        ImageIcon leftButtonIcon = createImageIcon("images/right.gif");  
        ImageIcon middleButtonIcon = createImageIcon("images/middle.gif");  
        ImageIcon rightButtonIcon = createImageIcon("images/left.gif");  
  
        b1 = new JButton("失效中间按钮(D)", leftButtonIcon);  
        b1.setVerticalTextPosition(AbstractButton.CENTER);//水平中间对齐   
        b1.setHorizontalTextPosition(AbstractButton.LEADING);//相当于LEFT   
        b1.setMnemonic(KeyEvent.VK_D);//将b1邦定alt+D键   
        b1.setActionCommand("disable");  
  
        b2 = new JButton("M中间按钮", middleButtonIcon);  
        b2.setVerticalTextPosition(AbstractButton.BOTTOM);  
        b2.setHorizontalTextPosition(AbstractButton.CENTER);  
        b2.setMnemonic(KeyEvent.VK_M);//将b2邦定alt+M键   
  
        b3 = new JButton("E激活中间按钮", rightButtonIcon);  
        b3.setMnemonic(KeyEvent.VK_E);//将b3邦定alt+E键   
        b3.setActionCommand("enable");  
        b3.setEnabled(false);  
  
        //给1和3添加事件监听   
        b1.addActionListener(this);  
        b3.addActionListener(this);  
        //设置按钮提示文本   
        b1.setToolTipText("点击这个按钮,将使中间的按钮失效!");  
        b2.setToolTipText("点击这个按钮,没有任何的事件发生!");  
        b3.setToolTipText("点击这个按钮,将使中间的按钮有效");  
  
        //将按钮添加到JPanel中   
        add(b1);  
        add(b2);  
        add(b3);  
    }  
/** 
 *方法说明:事件处理 
 */  
    public void actionPerformed(ActionEvent e) {  
        if ("disable".equals(e.getActionCommand())) {  
            b2.setEnabled(false);  
            b1.setEnabled(false);  
            b3.setEnabled(true);  
        } else {  
            b2.setEnabled(true);  
            b1.setEnabled(true);  
            b3.setEnabled(false);  
        }  
    }  
/** 
 *方法说明:创建图标, 
 *输入参数:String path 图标所在的路径 
 *返回类型:ImageIcon 图标对象 
 */  
    protected static ImageIcon createImageIcon(String path) {  
        java.net.URL imgURL = ButtonDemo.class.getResource(path);  
        if (imgURL != null) {  
            return new ImageIcon(imgURL);  
        } else {  
            System.err.println("Couldn't find file: " + path);  
            return null;  
        }  
    }  
/** 
 *方法说明:主方法 
 */  
    public static void main(String[] args) {  
        //设置使用新的swing界面   
        JFrame.setDefaultLookAndFeelDecorated(true);  
  
        //创建一个窗体   
        JFrame frame = new JFrame("ButtonDemo");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        //创建一个面板   
        ButtonDemo newContentPane = new ButtonDemo();  
        newContentPane.setOpaque(true);   
        frame.setContentPane(newContentPane);  
  
        //显示窗体   
        frame.pack();  
        frame.setVisible(true);  
    }  
}  


 

package test12;  
  
import java.awt.*;  
import java.awt.event.*;  
import javax.swing.*;  
/** 
 * Title: 检查盒演示 
 * Description: 选择不同的选择框显示不同的图片 
 * Filename: CheckBoxDemo.java< 
 */  
public class CheckBoxDemo extends JPanel  
                          implements ItemListener {  
     
    private static final long serialVersionUID = 1L;  
    JCheckBox chinButton;  
    JCheckBox glassesButton;  
    JCheckBox hairButton;  
    JCheckBox teethButton;  
  
    /* 
     * 有四个检查盒,分别对应下巴、眼镜、头发和牙齿 
     * 图片不是拼出来的,而是根据检查盒选择拼写图片文件名 
     * 图片文件名的定义格式为"geek-XXXX.gif" 
     * 其中 XXXX 根据检查盒的不同选择,而不同。它的格式如下: 
 
       ----             //没有选择 
 
       c---             //一个选择 
       -g-- 
       --h- 
       ---t 
 
       cg--             //两个选择 
       c-h- 
       c--t 
       -gh- 
       -g-t 
       --ht 
 
       -ght             //三个选择 
       c-ht 
       cg-t 
       cgh- 
 
       cght             //所有都选 
     */  
  
    StringBuffer choices;  
    JLabel pictureLabel;  
  
    public CheckBoxDemo() {  
        super(new BorderLayout());  
  
        //创建检查盒   
        chinButton = new JCheckBox("下巴(c)");  
        chinButton.setMnemonic(KeyEvent.VK_C);  
        chinButton.setSelected(true);  
  
        glassesButton = new JCheckBox("眼镜(g)");  
        glassesButton.setMnemonic(KeyEvent.VK_G);  
        glassesButton.setSelected(true);  
  
        hairButton = new JCheckBox("头发(h)");  
        hairButton.setMnemonic(KeyEvent.VK_H);  
        hairButton.setSelected(true);  
  
        teethButton = new JCheckBox("牙齿(t)");  
        teethButton.setMnemonic(KeyEvent.VK_T);  
        teethButton.setSelected(true);  
  
        //给检查盒添加监听   
        chinButton.addItemListener(this);  
        glassesButton.addItemListener(this);  
        hairButton.addItemListener(this);  
        teethButton.addItemListener(this);  
  
        choices = new StringBuffer("cght");  
  
        //放置一个带图片的标签   
        pictureLabel = new JLabel();  
        pictureLabel.setFont(pictureLabel.getFont().deriveFont(Font.ITALIC));  
        updatePicture();  
  
        //将检查盒放置到面版中   
        JPanel checkPanel = new JPanel(new GridLayout(0, 1));  
        checkPanel.add(chinButton);  
        checkPanel.add(glassesButton);  
        checkPanel.add(hairButton);  
        checkPanel.add(teethButton);  
  
        add(checkPanel, BorderLayout.LINE_START);  
        add(pictureLabel, BorderLayout.CENTER);  
        setBorder(BorderFactory.createEmptyBorder(20,20,20,20));  
    }  
/** 
 *<br>方法说明:监听检查盒事件,拼凑图片的文件名XXXX部分 
 *<br>输入参数: 
 *<br>返回类型: 
 */  
    public void itemStateChanged(ItemEvent e) {  
        int index = 0;  
        char c = '-';  
        Object source = e.getItemSelectable();  
  
        if (source == chinButton) {  
            index = 0;  
            c = 'c';  
        } else if (source == glassesButton) {  
            index = 1;  
            c = 'g';  
        } else if (source == hairButton) {  
            index = 2;  
            c = 'h';  
        } else if (source == teethButton) {  
            index = 3;  
            c = 't';  
        }  
          
        //取消选择事件   
        if (e.getStateChange() == ItemEvent.DESELECTED) {  
            c = '-';  
        }  
  
        //改变文件名字XXXX   
        choices.setCharAt(index, c);  
  
        updatePicture();  
    }  
/** 
 *<br>方法说明:绘制图片 
 *<br>输入参数: 
 *<br>返回类型: 
 */  
    protected void updatePicture() {  
        //将得到的图片制成图标   
        ImageIcon icon = createImageIcon(  
                                    "images/geek/geek-"  
                                    + choices.toString()  
                                    + ".gif");  
        pictureLabel.setIcon(icon);  
        pictureLabel.setToolTipText(choices.toString());  
        if (icon == null) {  
            pictureLabel.setText("没有发现图片");  
        } else {  
            pictureLabel.setText(null);  
        }  
    }  
/** 
 *<br>方法说明:获取图标 
 *<br>输入参数:String path 图片路径 
 *<br>返回类型:ImageIcon对象 
 */  
    protected static ImageIcon createImageIcon(String path) {  
        java.net.URL imgURL = CheckBoxDemo.class.getResource(path);  
        if (imgURL != null) {  
            return new ImageIcon(imgURL);  
        } else {  
            System.err.println("Couldn't find file: " + path);  
            return null;  
        }  
    }  
/** 
 *<br>方法说明:主方法 
 *<br>输入参数: 
 *<br>返回类型: 
 */  
    public static void main(String s[]) {  
         JFrame.setDefaultLookAndFeelDecorated(true);  
  
        //创建一个窗体,   
        JFrame frame = new JFrame("CheckBoxDemo");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        //创建一个面板   
        JComponent newContentPane = new CheckBoxDemo();  
        newContentPane.setOpaque(true);  
        frame.setContentPane(newContentPane);  
  
        //显示窗体   
        frame.pack();  
        frame.setVisible(true);  
    }  
} 


 

package test13;  
  
import java.awt.*;  
import java.awt.event.*;  
import javax.swing.*;  
import java.util.*;  
import java.text.SimpleDateFormat;  
/** 
 * Title: ComboBox下拉域演示</p> 
 * Description: 通过选择或这输入一种日期格式来格式化今天的日期 
 * Filename: ComboBoxDemo.java 
 */  
  
public class ComboBoxDemo extends JPanel  
                           implements ActionListener {  
  
    private static final long serialVersionUID = 1L;  
    static JFrame frame;  
    JLabel result;  
    String currentPattern;  
/** 
 *方法说明:构造器。初始化窗体构件 
 */  
    public ComboBoxDemo() {  
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));  
        String[] patternExamples = {  
                 "dd MMMMM yyyy",  
                 "dd.MM.yy",  
                 "MM/dd/yy",  
                 "yyyy.MM.dd G 'at' hh:mm:ss z",  
                 "EEE, MMM d, ''yy",  
                 "h:mm a",  
                 "H:mm:ss:SSS",  
                 "K:mm a,z",  
                 "yyyy.MMMMM.dd GGG hh:mm aaa"  
                 };  
  
        currentPattern = patternExamples[0];  
  
        //设置一个规范的用户界面   
        JLabel patternLabel1 = new JLabel("输入一个字符格式或者");  
        JLabel patternLabel2 = new JLabel("从下拉列表中选择一种:");  
  
        JComboBox patternList = new JComboBox(patternExamples);  
        patternList.setEditable(true);//标注这里ComboBox可进行编辑   
        patternList.addActionListener(this);  
  
        //创建一个显示结果用户界面   
        JLabel resultLabel = new JLabel("当前 日期/时间",  
                                        JLabel.LEADING);//相当于LEFT   
        result = new JLabel(" ");  
        result.setForeground(Color.black);  
        result.setBorder(BorderFactory.createCompoundBorder(  
             BorderFactory.createLineBorder(Color.black),  
             BorderFactory.createEmptyBorder(5,5,5,5)  
        ));  
  
        //布置构件   
        JPanel patternPanel = new JPanel();  
        patternPanel.setLayout(new BoxLayout(patternPanel,  
                               BoxLayout.PAGE_AXIS));  
        patternPanel.add(patternLabel1);  
        patternPanel.add(patternLabel2);  
        patternList.setAlignmentX(Component.LEFT_ALIGNMENT);  
        patternPanel.add(patternList);  
  
        JPanel resultPanel = new JPanel(new GridLayout(0, 1));  
        resultPanel.add(resultLabel);  
        resultPanel.add(result);  
  
        patternPanel.setAlignmentX(Component.LEFT_ALIGNMENT);  
        resultPanel.setAlignmentX(Component.LEFT_ALIGNMENT);  
  
        add(patternPanel);  
        add(Box.createRigidArea(new Dimension(0, 10)));  
        add(resultPanel);  
  
        setBorder(BorderFactory.createEmptyBorder(10,10,10,10));  
  
        reformat();  
    }   
/** 
 *方法说明:事件处理 
 */  
    public void actionPerformed(ActionEvent e) {  
        JComboBox cb = (JComboBox)e.getSource();  
        String newSelection = (String)cb.getSelectedItem();  
        currentPattern = newSelection;  
        reformat();  
    }  
/** 
 *方法说明:格式和显示今天的日期 
 */  
    public void reformat() {  
        Date today = new Date();  
        SimpleDateFormat formatter =  
           new SimpleDateFormat(currentPattern);  
        try {  
            String dateString = formatter.format(today);  
            result.setForeground(Color.black);  
            result.setText(dateString);  
        } catch (IllegalArgumentException iae) {  
            result.setForeground(Color.red);  
            result.setText("Error: " + iae.getMessage());  
        }  
    }  
/** 
 *方法说明:主方法 
 */  
    public static void main(String[] args) {  
        JFrame.setDefaultLookAndFeelDecorated(true);  
  
        //创建一个窗体   
        frame = new JFrame("ComboBoxDemo");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        //创建一个面版容器   
        JComponent newContentPane = new ComboBoxDemo();  
        newContentPane.setOpaque(true);  
        frame.setContentPane(newContentPane);  
  
        //显示窗体   
        frame.pack();  
        frame.setVisible(true);  
    }  
}  


 

package test14;  
  
import java.awt.*;  
import java.awt.event.*;  
import javax.swing.*;  
import javax.swing.event.*;  
/** 
 * Title: 列表框 
 * Description: 通过输入框添加元素和点击“删除”按钮删除列表元素 
 * Filename: ListDemo.java 
 */  
public class ListDemo extends JPanel  
                      implements ListSelectionListener {  
    private static final long serialVersionUID = 1L;  
    private JList list;  
    private DefaultListModel listModel;  
  
    private static final String hireString = "添加";  
    private static final String fireString = "删除";  
    private JButton fireButton;  
    private JTextField employeeName;  
  
    public ListDemo() {  
        super(new BorderLayout());  
        //构建List的列表元素   
        listModel = new DefaultListModel();  
        listModel.addElement("Alan Sommerer");  
        listModel.addElement("Alison Huml");  
        listModel.addElement("Kathy Walrath");  
        listModel.addElement("Lisa Friendly");  
        listModel.addElement("Mary Campione");  
        listModel.addElement("Sharon Zakhour");  
  
        //创建一个List构件,并将列表元素添加到列表中   
        list = new JList(listModel);  
        //设置选择模式为单选   
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);  
        //初始化选择索引在0的位置,即第一个元素   
        list.setSelectedIndex(0);  
        list.addListSelectionListener(this);  
        //设置列表可以同时看5个元素   
        list.setVisibleRowCount(5);  
        //给列表添加一个滑动块   
        JScrollPane listScrollPane = new JScrollPane(list);  
  
        JButton hireButton = new JButton(hireString);  
        HireListener hireListener = new HireListener(hireButton);  
        hireButton.setActionCommand(hireString);  
        hireButton.addActionListener(hireListener);  
        hireButton.setEnabled(false);  
  
        fireButton = new JButton(fireString);  
        fireButton.setActionCommand(fireString);  
        fireButton.addActionListener(new FireListener());  
  
        employeeName = new JTextField(10);  
        employeeName.addActionListener(hireListener);  
        employeeName.getDocument().addDocumentListener(hireListener);  
        @SuppressWarnings("unused")  
        String name = listModel.getElementAt(  
                              list.getSelectedIndex()).toString();  
  
        //创建一个面板   
        JPanel buttonPane = new JPanel();  
        buttonPane.setLayout(new BoxLayout(buttonPane,  
                                           BoxLayout.LINE_AXIS));  
        buttonPane.add(fireButton);  
        buttonPane.add(Box.createHorizontalStrut(5));  
        buttonPane.add(new JSeparator(SwingConstants.VERTICAL));  
        buttonPane.add(Box.createHorizontalStrut(5));  
        buttonPane.add(employeeName);  
        buttonPane.add(hireButton);  
        buttonPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));  
  
        add(listScrollPane, BorderLayout.CENTER);  
        add(buttonPane, BorderLayout.PAGE_END);  
    }  
/** 
 *类说明:“添加”按钮监听 
 *类描述:当点击“添加”按钮后,实现将元素添加到列表框中 
 */  
    class FireListener implements ActionListener {  
        public void actionPerformed(ActionEvent e) {  
             
            int index = list.getSelectedIndex();  
            listModel.remove(index);  
  
            int size = listModel.getSize();  
  
            if (size == 0) { //如果没有了选择项,则是“删除”按钮实效   
                fireButton.setEnabled(false);  
  
            } else { //选择了一个   
                if (index == listModel.getSize()) {  
                    //移除选项   
                    index--;  
                }  
  
                list.setSelectedIndex(index);  
                list.ensureIndexIsVisible(index);  
            }  
        }  
    }  
  
/** 
 *类说明:“删除”按钮监听事件 
 *类描述:实现删除列表元素 
 */  
    class HireListener implements ActionListener, DocumentListener {  
        private boolean alreadyEnabled = false;  
        private JButton button;  
  
        public HireListener(JButton button) {  
            this.button = button;  
        }  
  
        //必须实现 ActionListener.   
        public void actionPerformed(ActionEvent e) {  
            String name = employeeName.getText();  
  
            //如果输入空或有同名   
            if (name.equals("") || alreadyInList(name)) {  
                Toolkit.getDefaultToolkit().beep();  
                employeeName.requestFocusInWindow();  
                employeeName.selectAll();  
                return;  
            }  
  
            int index = list.getSelectedIndex(); //获取选择项   
            if (index == -1) { //如果没有选择,就插入到第一个   
                index = 0;  
            } else {           //如果有选择,那么插入到选择项的后面   
                index++;  
            }  
  
            listModel.insertElementAt(employeeName.getText(), index);  
   
            //重新设置文本   
            employeeName.requestFocusInWindow();  
            employeeName.setText("");  
  
            //选择新的元素,并显示出来   
            list.setSelectedIndex(index);  
            list.ensureIndexIsVisible(index);  
        }  
/** 
 *方法说明:检测是否在LIST中有重名元素 
 *输入参数:String name 检测的名字 
 *返回类型:boolean 布尔值,如果存在返回true 
 */  
  
        protected boolean alreadyInList(String name) {  
            return listModel.contains(name);  
        }  
  
/** 
 *方法说明:实现DocumentListener接口,必需实现的方法: 
 */  
        public void insertUpdate(DocumentEvent e) {  
            enableButton();  
        }  
  
/** 
 *方法说明:实现DocumentListener接口,必需实现的方法 
 */  
        public void removeUpdate(DocumentEvent e) {  
            handleEmptyTextField(e);  
        }  
  
/** 
 *方法说明:实现DocumentListener接口,必需实现的方法 
 */  
        public void changedUpdate(DocumentEvent e) {  
            if (!handleEmptyTextField(e)) {  
                enableButton();  
            }  
        }  
/** 
 *方法说明:按钮使能 
 */  
        private void enableButton() {  
            if (!alreadyEnabled) {  
                button.setEnabled(true);  
            }  
        }  
/** 
 *方法说明:实现DocumentListener接口,必需实现的方法,修改按钮的状态 
 */  
        private boolean handleEmptyTextField(DocumentEvent e) {  
            if (e.getDocument().getLength() <= 0) {  
                button.setEnabled(false);  
                alreadyEnabled = false;  
                return true;  
            }  
            return false;  
        }  
    }  
/** 
 *方法说明:实现ListSelectionListener接口,必需实现的方法: 
 */  
    public void valueChanged(ListSelectionEvent e) {  
        if (e.getValueIsAdjusting() == false) {  
  
            if (list.getSelectedIndex() == -1) {  
                fireButton.setEnabled(false);  
  
            } else {  
                fireButton.setEnabled(true);  
            }  
        }  
    }  
/** 
 *方法说明:主方法 
 */  
    public static void main(String[] args) {  
  
        JFrame.setDefaultLookAndFeelDecorated(true);  
  
        //创建一个窗体   
        JFrame frame = new JFrame("ListDemo");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        //创建一个面版   
        JComponent newContentPane = new ListDemo();  
        newContentPane.setOpaque(true);  
        frame.setContentPane(newContentPane);  
  
        //显示窗体   
        frame.pack();  
        frame.setVisible(true);  
    }  
}  


 

package test15;  
  
import javax.swing.JTabbedPane;  
import javax.swing.ImageIcon;  
import javax.swing.JLabel;  
import javax.swing.JPanel;  
import javax.swing.JFrame;  
/** 
 * Title: 选项卡演示 
 * Description: 这里是一个选项卡演示,点击不同的卡片,显示的内容不同 
 * Filename: TabbedPaneDemo.java 
 */  
import java.awt.*;  
  
public class TabbedPaneDemo extends JPanel {  
    /** 
     *  
     */  
    private static final long serialVersionUID = 1L;  
  
    public TabbedPaneDemo() {  
        super(new GridLayout(1, 1));  
  
        ImageIcon icon = createImageIcon("images/middle.gif");  
        JTabbedPane tabbedPane = new JTabbedPane();  
  
        Component panel1 = makeTextPanel("#第一个卡片#");  
        tabbedPane.addTab("One", icon, panel1,  
                          "第一个卡片提示信息!");  
        tabbedPane.setSelectedIndex(0);  
  
        Component panel2 = makeTextPanel("##第二个卡片##");  
        tabbedPane.addTab("Two", icon, panel2,  
                          "第二个卡片提示信息!");  
  
        Component panel3 = makeTextPanel("###第三个卡片###");  
        tabbedPane.addTab("Three", icon, panel3,  
                          "第三个卡片提示信息!");  
  
        Component panel4 = makeTextPanel("####第四个卡片####");  
        tabbedPane.addTab("Four", icon, panel4,  
                          "第四个卡片提示信息!");  
  
        //将选项卡添加到panl中   
        add(tabbedPane);  
    }  
/** 
 *方法说明:添加信息到选项卡中 
 *输入参数:String text 显示的信息内容 
 *返回类型:Component 成员对象 
 */  
    protected Component makeTextPanel(String text) {  
        JPanel panel = new JPanel(false);  
        JLabel filler = new JLabel(text);  
        filler.setHorizontalAlignment(JLabel.CENTER);  
        panel.setLayout(new GridLayout(1, 1));  
        panel.add(filler);  
        return panel;  
    }  
/** 
 *方法说明:获得图片 
 *输入参数:String path 图片的路径 
 *返回类型:ImageIcon 图片对象 
 */  
    protected static ImageIcon createImageIcon(String path) {  
        java.net.URL imgURL = TabbedPaneDemo.class.getResource(path);  
        if (imgURL != null) {  
            return new ImageIcon(imgURL);  
        } else {  
            System.err.println("Couldn't find file: " + path);  
            return null;  
        }  
    }  
  
    public static void main(String[] args) {  
        //使用Swing窗体描述   
        JFrame.setDefaultLookAndFeelDecorated(true);  
  
        //创建窗体   
        JFrame frame = new JFrame("TabbedPaneDemo");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        frame.getContentPane().add(new TabbedPaneDemo(),  
                                 BorderLayout.CENTER);  
  
        //显示窗体   
        frame.setSize(400, 200);  
        frame.setVisible(true);  
    }  
}  


 

package test16;  
  
import javax.swing.JOptionPane;  
import javax.swing.JDialog;  
import javax.swing.JTextField;  
import java.beans.*; //property change stuff   
import java.awt.*;  
import java.awt.event.*;  
/** 
 * Title: 用户自定义对话框 
 * Description: 自己定义对话框的风格。这使得对话框的样式更加多样化 
 * Filename: CustomDialog.java 
 */  
class CustomDialog extends JDialog  
                   implements ActionListener,  
                              PropertyChangeListener {  
  
    private static final long serialVersionUID = 1L;  
    private String typedText = null;  
    private JTextField textField;  
    private DialogDemo dd;  
  
    private String magicWord;  
    private JOptionPane optionPane;  
  
    private String btnString1 = "确定";  
    private String btnString2 = "取消";  
/** 
 *方法说明:返回文本输入字符 
 */  
    public String getValidatedText() {  
        return typedText;  
    }  
/** 
 *方法说明:创建一个结果对话框 
 */  
    public CustomDialog(Frame aFrame, String aWord, DialogDemo parent) {  
        super(aFrame, true);  
        dd = parent;  
          
        magicWord = aWord.toUpperCase();  
        setTitle("测试");  
  
        textField = new JTextField(10);  
  
        //定义显示信息   
        String msgString1 = "李先生: jeck是你的英文名字吗?";  
        String msgString2 = "(这个答案是: \"" + magicWord  
                              + "\"。)";  
        Object[] array = {msgString1, msgString2, textField};  
  
  
        Object[] options = {btnString1, btnString2};  
  
        //创建对话框   
        optionPane = new JOptionPane(array,  
                                    JOptionPane.QUESTION_MESSAGE,  
                                    JOptionPane.YES_NO_OPTION,  
                                    null,  
                                    options,  
                                    options[0]);  
  
        //显示对话框   
        setContentPane(optionPane);  
  
        //设置当关闭窗体动作模式   
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);  
        addWindowListener(new WindowAdapter() {  
                public void windowClosing(WindowEvent we) {  
                  
                    optionPane.setValue(new Integer(  
                                        JOptionPane.CLOSED_OPTION));  
            }  
        });  
  
        //使的文本输入域得到焦点   
        addComponentListener(new ComponentAdapter() {  
            public void componentShown(ComponentEvent ce) {  
                textField.requestFocusInWindow();  
            }  
        });  
  
        //给文本域添加监听事件   
        textField.addActionListener(this);  
  
        //监听输入改变   
        optionPane.addPropertyChangeListener(this);  
    }  
  
    /** 文本域监听处理 */  
    public void actionPerformed(ActionEvent e) {  
        optionPane.setValue(btnString1);  
    }  
  
    /** 监听输入的改变 */  
    public void propertyChange(PropertyChangeEvent e) {  
        String prop = e.getPropertyName();  
  
        if (isVisible()  
         && (e.getSource() == optionPane)  
         && (JOptionPane.VALUE_PROPERTY.equals(prop) ||  
             JOptionPane.INPUT_VALUE_PROPERTY.equals(prop))) {  
            Object value = optionPane.getValue();  
  
            if (value == JOptionPane.UNINITIALIZED_VALUE) {  
                 return;  
            }  
  
            optionPane.setValue(  
                    JOptionPane.UNINITIALIZED_VALUE);  
  
            if (btnString1.equals(value)) {  
                    typedText = textField.getText();  
                String ucText = typedText.toUpperCase();  
                if (magicWord.equals(ucText)) {  
                    //如果输入有效,则清楚文本域并隐藏对话框   
                    clearAndHide();  
                } else {  
                    //文本输入无效   
                    textField.selectAll();  
                    JOptionPane.showMessageDialog(  
                                    CustomDialog.this,  
                                    "对不起, \"" + typedText + "\" "  
                                    + "是无效的输入。\n"  
                                    + "请重新输入"  
                                    + magicWord + ".",  
                                    "再试一次",  
                                    JOptionPane.ERROR_MESSAGE);  
                    typedText = null;  
                    textField.requestFocusInWindow();  
                }  
            } else { //用户关闭了对话框或点击了“cancel”   
                dd.setLabel("好吧! "  
                         + "我们不能影响你的决定输入"  
                         + magicWord + "。");  
                typedText = null;  
                clearAndHide();  
            }  
        }  
    }  
/** 
 *方法说明:清楚文本域并隐藏痘翱蝌 
 
 */  
    public void clearAndHide() {  
        textField.setText(null);  
        setVisible(false);  
    }  
}  


 

package test16;  
  
import javax.swing.JOptionPane;  
import javax.swing.JDialog;  
import javax.swing.JButton;  
import javax.swing.JRadioButton;  
import javax.swing.ButtonGroup;  
import javax.swing.JLabel;  
import javax.swing.ImageIcon;  
import javax.swing.BoxLayout;  
import javax.swing.Box;  
import javax.swing.BorderFactory;  
import javax.swing.border.Border;  
import javax.swing.JTabbedPane;  
import javax.swing.JPanel;  
import javax.swing.JFrame;  
import java.beans.*;   
import java.awt.*;  
import java.awt.event.*;  
  
/** 
 *Title: 对话框演示 
 *Description: 全面的演示各种类型的对话框的使用 
 *Filename: DialogDemo.java 
 */  
public class DialogDemo extends JPanel {  
  
    private static final long serialVersionUID = 1L;  
    JLabel label;  
    ImageIcon icon = createImageIcon("images/middle.gif");  
    JFrame frame;  
    String simpleDialogDesc = "简单的信息提示对话窗";  
    String iconDesc = "带有图标的对话窗";  
    String moreDialogDesc = "复杂信息对话窗";  
    CustomDialog customDialog;  
/** 
 *方法说明:构造器,生成一个面板添加到JFrame中 
 *输入参数: 
 *返回类型: 
 */  
    public DialogDemo(JFrame frame) {  
        super(new BorderLayout());  
        this.frame = frame;  
        customDialog = new CustomDialog(frame, "tom", this);  
        customDialog.pack();  
  
        //创建成员   
        JPanel frequentPanel = createSimpleDialogBox();  
        JPanel featurePanel = createFeatureDialogBox();  
        JPanel iconPanel = createIconDialogBox();  
        label = new JLabel("点击\"显示\" 按钮"  
                           + " 显示一个选择的对话框",  
                           JLabel.CENTER);  
  
        //放置对象   
        Border padding = BorderFactory.createEmptyBorder(20,20,5,20);  
        frequentPanel.setBorder(padding);  
        featurePanel.setBorder(padding);  
        iconPanel.setBorder(padding);  
        //创建选项卡   
        JTabbedPane tabbedPane = new JTabbedPane();  
        tabbedPane.addTab("简单对话窗", null,  
                          frequentPanel,  
                          simpleDialogDesc);   
        tabbedPane.addTab("复杂对话窗", null,  
                          featurePanel,  
                          moreDialogDesc);  
        tabbedPane.addTab("图标对话窗", null,  
                          iconPanel,  
                          iconDesc);  
  
        add(tabbedPane, BorderLayout.CENTER);  
        add(label, BorderLayout.PAGE_END);  
        label.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));  
    }  
/** 
 *方法说明:设置按钮上的文字 
 *输入参数:String newText 添加的文字 
 *返回类型: 
 */  
    void setLabel(String newText) {  
        label.setText(newText);  
    }  
/** 
 *方法说明:获取图片 
 *输入参数:String path 图片完整路径和名字 
 *返回类型:ImageIcon 图片对象 
 */  
    protected static ImageIcon createImageIcon(String path) {  
        java.net.URL imgURL = DialogDemo.class.getResource(path);  
        if (imgURL != null) {  
            return new ImageIcon(imgURL);  
        } else {  
            System.err.println("Couldn't find file: " + path);  
            return null;  
        }  
    }  
/** 
 *方法说明:创建一个JPanel,给第一个选项卡 
 *输入参数: 
 *返回类型: 
 */  
    private JPanel createSimpleDialogBox() {  
        final int numButtons = 4;  
        JRadioButton[] radioButtons = new JRadioButton[numButtons];  
        final ButtonGroup group = new ButtonGroup();  
  
        JButton showItButton = null;  
  
        final String defaultMessageCommand = "default";  
        final String yesNoCommand = "yesno";  
        final String yeahNahCommand = "yeahnah";  
        final String yncCommand = "ync";  
        //添加单选到数字   
        radioButtons[0] = new JRadioButton("只有“OK”按钮");  
        radioButtons[0].setActionCommand(defaultMessageCommand);  
  
        radioButtons[1] = new JRadioButton("有“Yes/No”二个按钮");  
        radioButtons[1].setActionCommand(yesNoCommand);  
  
        radioButtons[2] = new JRadioButton("有“Yes/No”两个按钮 "  
                      + "(程序添加文字)");  
        radioButtons[2].setActionCommand(yeahNahCommand);  
  
        radioButtons[3] = new JRadioButton("有“Yes/No/Cancel”三个按钮 "  
                           + "(程序添加文字)");  
        radioButtons[3].setActionCommand(yncCommand);  
        //将四个单选组成一个群   
        for (int i = 0; i < numButtons; i++) {  
            group.add(radioButtons[i]);  
        }  
        //设置第一个为默认选择   
        radioButtons[0].setSelected(true);  
        //定义“显示”按钮   
        showItButton = new JButton("显示");  
        //给“显示”按钮添加监听   
        showItButton.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {  
                String command = group.getSelection().getActionCommand();  
  
                //ok对话窗   
                if (command == defaultMessageCommand) {  
                    JOptionPane.showMessageDialog(frame,  
                                "鸡蛋不可能是绿色的!");  
  
                //yes/no 对话窗   
                } else if (command == yesNoCommand) {  
                    int n = JOptionPane.showConfirmDialog(  
                            frame, "你喜欢吃酸菜鱼吗?",  
                            "一个很无聊的问题!!",  
                            JOptionPane.YES_NO_OPTION);  
                    if (n == JOptionPane.YES_OPTION) {//选择yes   
                        setLabel("哇!我也是!");  
                    } else if (n == JOptionPane.NO_OPTION) {//选择no   
                        setLabel("唉!我喜欢吃!");  
                    } else {  
                        setLabel("快告诉我吧!");  
                    }  
  
                //yes/no (自己输入选项)   
                } else if (command == yeahNahCommand) {  
                    Object[] options = {"是的", "不喜欢"};  
                    int n = JOptionPane.showOptionDialog(frame,  
                                    "你喜欢酸菜鱼吗?",  
                                    "又一个无聊的问题!",  
                                    JOptionPane.YES_NO_OPTION,  
                                    JOptionPane.QUESTION_MESSAGE,  
                                    null,  
                                    options,  
                                    options[0]);  
                    if (n == JOptionPane.YES_OPTION) {  
                        setLabel("你哄人的吧,我也喜欢。");  
                    } else if (n == JOptionPane.NO_OPTION) {  
                        setLabel("其实我也不喜欢!");  
                    } else {  
                        setLabel("这都不肯告诉我,小气鬼!");  
                    }  
  
                //yes/no/cancel 对话框   
                } else if (command == yncCommand) {  
                    Object[] options = {"是的,给我来一份。",  
                                        "不,谢谢!",  
                                        "不,我要水煮鱼!"};  
                    //构造对话框   
                    int n = JOptionPane.showOptionDialog(frame,  
                                    "先生!我们这里有鲜美的酸菜鱼,您需要吗?",  
                                    "服务生的问题。",  
                                    JOptionPane.YES_NO_CANCEL_OPTION,  
                                    JOptionPane.QUESTION_MESSAGE,  
                                    null,  
                                    options,  
                                    options[2]);  
                    if (n == JOptionPane.YES_OPTION) {  
                        setLabel("你要的酸菜鱼来了!");  
                    } else if (n == JOptionPane.NO_OPTION) {  
                        setLabel("好的,你需要其它的。");  
                    } else if (n == JOptionPane.CANCEL_OPTION) {  
                        setLabel("好的,我们给你做水煮鱼!");  
                    } else {  
                        setLabel("对不起!你还没有点菜呢!");  
                    }  
                }  
                return;  
            }  
        });  
  
        return createPane(simpleDialogDesc + ":",  
                          radioButtons,  
                          showItButton);  
    }  
/** 
 *方法说明:提供给createSimpleDialogBox和createFeatureDialogBox方法 
 *方法说明:创建带提示信息、一列单选框和“显示”按钮 
 *输入参数:String description 提示帮助信息 
 *输入参数:JRadioButton[] radioButtons 单选框组 
 *输入参数:JButton showButton “显示”按钮 
 *返回类型:JPanel 添加好的面板 
 */  
    private JPanel createPane(String description,  
                              JRadioButton[] radioButtons,  
                              JButton showButton) {  
  
        int numChoices = radioButtons.length;  
        JPanel box = new JPanel();  
        JLabel label = new JLabel(description);  
  
        box.setLayout(new BoxLayout(box, BoxLayout.PAGE_AXIS));  
        box.add(label);  
        //添加radio   
        for (int i = 0; i < numChoices; i++) {  
            box.add(radioButtons[i]);  
        }  
  
        JPanel pane = new JPanel(new BorderLayout());  
        pane.add(box, BorderLayout.PAGE_START);  
        pane.add(showButton, BorderLayout.PAGE_END);  
        return pane;  
    }  
/** 
 *方法说明:提供给createSimpleDialogBox和createFeatureDialogBox方法 
 *方法说明:创建带提示信息、二列单选框和“显示”按钮 
 *输入参数:String description 提示帮助信息 
 *输入参数:JRadioButton[] radioButtons 单选框组 
 *输入参数:JButton showButton “显示”按钮 
 *返回类型:JPanel 添加好的面板 
 */  
     private JPanel create2ColPane(String description,  
                                  JRadioButton[] radioButtons,  
                                  JButton showButton) {  
        JLabel label = new JLabel(description);  
        int numPerColumn = radioButtons.length/2;  
  
        JPanel grid = new JPanel(new GridLayout(0, 2));  
        for (int i = 0; i < numPerColumn; i++) {  
            grid.add(radioButtons[i]);  
            grid.add(radioButtons[i + numPerColumn]);  
        }  
  
        JPanel box = new JPanel();  
        box.setLayout(new BoxLayout(box, BoxLayout.PAGE_AXIS));  
        box.add(label);  
        grid.setAlignmentX(0.0f);  
        box.add(grid);  
  
        JPanel pane = new JPanel(new BorderLayout());  
        pane.add(box, BorderLayout.PAGE_START);  
        pane.add(showButton, BorderLayout.PAGE_END);  
  
        return pane;  
    }  
/** 
 *方法说明:创建第三个选项卡的面板 
 *方法说明:这里都是实现showMessageDialog类,但是也可以指定图标 
 *输入参数: 
 *返回类型:JPanel 构造好的面板 
 */  
  
    private JPanel createIconDialogBox() {  
        JButton showItButton = null;  
  
        final int numButtons = 6;  
        JRadioButton[] radioButtons = new JRadioButton[numButtons];  
        final ButtonGroup group = new ButtonGroup();  
  
        final String plainCommand = "plain";  
        final String infoCommand = "info";  
        final String questionCommand = "question";  
        final String errorCommand = "error";  
        final String warningCommand = "warning";  
        final String customCommand = "custom";  
  
        radioButtons[0] = new JRadioButton("普通(没有图标)");  
        radioButtons[0].setActionCommand(plainCommand);  
  
        radioButtons[1] = new JRadioButton("信息图标");  
        radioButtons[1].setActionCommand(infoCommand);  
  
        radioButtons[2] = new JRadioButton("问题图标");  
        radioButtons[2].setActionCommand(questionCommand);  
  
        radioButtons[3] = new JRadioButton("错误图标");  
        radioButtons[3].setActionCommand(errorCommand);  
  
        radioButtons[4] = new JRadioButton("警告图标");  
        radioButtons[4].setActionCommand(warningCommand);  
  
        radioButtons[5] = new JRadioButton("自定义图标");  
        radioButtons[5].setActionCommand(customCommand);  
  
        for (int i = 0; i < numButtons; i++) {  
            group.add(radioButtons[i]);  
        }  
        radioButtons[0].setSelected(true);  
  
        showItButton = new JButton("显示");  
        showItButton.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {  
                String command = group.getSelection().getActionCommand();  
  
                //没有图标   
                if (command == plainCommand) {  
                    JOptionPane.showMessageDialog(frame,  
                                    "水煮鱼里不要放酸菜!",  
                                    "无图标",  
                                    JOptionPane.PLAIN_MESSAGE);  
                //信息图标   
                } else if (command == infoCommand) {  
                    JOptionPane.showMessageDialog(frame,  
                                    "水煮鱼里不要放酸菜!",  
                                    "信息图标",  
                                    JOptionPane.INFORMATION_MESSAGE);  
  
                //问题图标   
                } else if (command == questionCommand) {  
                    JOptionPane.showMessageDialog(frame,  
                                    "请你吃饭前洗手,好吗?",  
                                    "问题",  
                                    JOptionPane.QUESTION_MESSAGE);  
                //错误图标   
                } else if (command == errorCommand) {  
                    JOptionPane.showMessageDialog(frame,  
                                    "对不起,你的信用卡没有资金了!",  
                                    "错误信息",  
                                    JOptionPane.ERROR_MESSAGE);  
                //警告图标   
                } else if (command == warningCommand) {  
                    JOptionPane.showMessageDialog(frame,  
                                    "警告!你严重透支信用卡,请尽快补齐金额!",  
                                    "警告信息",  
                                    JOptionPane.WARNING_MESSAGE);  
                //自定义图标   
                } else if (command == customCommand) {  
                    JOptionPane.showMessageDialog(frame,  
                                    "哈哈。我想用什么图标都可以!",  
                                    "自定义对话窗",  
                                    JOptionPane.INFORMATION_MESSAGE,  
                                    icon);  
                }  
            }  
        });  
  
        return create2ColPane(iconDesc + ":",  
                              radioButtons,  
                              showItButton);  
    }  
/** 
 *方法说明:创建一个JPanel,放在第二个选项卡上 
 *输入参数: 
 *返回类型: 
 */  
    private JPanel createFeatureDialogBox() {  
        final int numButtons = 5;  
        JRadioButton[] radioButtons = new JRadioButton[numButtons];  
        final ButtonGroup group = new ButtonGroup();  
  
        JButton showItButton = null;  
        //定义操作命令   
        final String pickOneCommand = "pickone";  
        final String textEnteredCommand = "textfield";  
        final String nonAutoCommand = "nonautooption";  
        final String customOptionCommand = "customoption";  
        final String nonModalCommand = "nonmodal";  
        //定义radio数组   
        radioButtons[0] = new JRadioButton("选择一个");  
        radioButtons[0].setActionCommand(pickOneCommand);  
  
        radioButtons[1] = new JRadioButton("输入信息");  
        radioButtons[1].setActionCommand(textEnteredCommand);  
  
        radioButtons[2] = new JRadioButton("关闭按钮无效");  
        radioButtons[2].setActionCommand(nonAutoCommand);  
  
        radioButtons[3] = new JRadioButton("输入校验"  
                                           + "(用户输入信息)");  
        radioButtons[3].setActionCommand(customOptionCommand);  
  
        radioButtons[4] = new JRadioButton("没有模式");  
        radioButtons[4].setActionCommand(nonModalCommand);  
        //合成一个组群   
        for (int i = 0; i < numButtons; i++) {  
            group.add(radioButtons[i]);  
        }  
        //设置第一个为默认选择   
        radioButtons[0].setSelected(true);  
  
        showItButton = new JButton("显示");  
        showItButton.addActionListener(new ActionListener() {  
            @SuppressWarnings("static-access")  
            public void actionPerformed(ActionEvent e) {  
                String command = group.getSelection().getActionCommand();  
  
                //选择一个   
                if (command == pickOneCommand) {  
                    Object[] possibilities = {"辣椒", "西红柿", "洋葱"};  
                    //设置对话框   
                    String s = (String)JOptionPane.showInputDialog(  
                                        frame,    //所属窗体   
                                        "请选择项目:\n"  
                                        + "\"鸡蛋炒\"",  //输出信息   
                                        "客户选择",  
                                        JOptionPane.PLAIN_MESSAGE,  //对话框模式   
                                        icon,           //显示图标   
                                        possibilities,   //选项内容   
                                        "辣椒");    //默认选项   
  
                    //如果有选择   
                    if ((s != null) && (s.length() > 0)) {  
                        setLabel("鸡蛋炒" + s + "!");  
                        return;  
                    }  
  
                    //如果客户没有选择   
                    setLabel("快点!");  
  
                //文本输入   
                } else if (command == textEnteredCommand) {  
                    String s = (String)JOptionPane.showInputDialog(  
                                        frame,  
                                        "选择一个配料\n"  
                                        + "\"鸡蛋炒\"",  
                                        "客户输入",  
                                        JOptionPane.PLAIN_MESSAGE,  
                                        icon,  
                                        null,  
                                        "辣椒");  
  
                    //如果用户有输入   
                    if ((s != null) && (s.length() > 0)) {  
                        setLabel("你要的是鸡蛋炒" + s + "!");  
                        return;  
                    }  
  
                    //如果返回的是空或者是null。   
                    setLabel("快些选择!");  
  
                //关闭按钮无效   
                } else if (command == nonAutoCommand) {  
                    //构造一个对话框面板   
                    final JOptionPane optionPane = new JOptionPane(  
                                    "关闭这个对话框\n"  
                                    + "请点击下面的按钮\n"  
                                    + "明白吗?",  
                                    JOptionPane.QUESTION_MESSAGE,  
                                    JOptionPane.YES_NO_OPTION);  
  
                    JDialog.setDefaultLookAndFeelDecorated(false);  
                    //构造一个对话框   
                    final JDialog dialog = new JDialog(frame,  
                                                 "点击一个按钮",  
                                                 true);  
                    //将对话框面板添加到对话框中   
                    dialog.setContentPane(optionPane);  
                    //设置对话框关闭时的操作模式   
                    dialog.setDefaultCloseOperation(  
                        JDialog.DO_NOTHING_ON_CLOSE);  
                    dialog.addWindowListener(new WindowAdapter() {  
                        public void windowClosing(WindowEvent we) { //当点击关闭按钮   
                            setLabel("阻碍用户视图关闭窗体!");  
                        }  
                    });  
                      
                    JDialog.setDefaultLookAndFeelDecorated(true);  
                      
                    optionPane.addPropertyChangeListener(  
                        new PropertyChangeListener() {  
                            public void propertyChange(PropertyChangeEvent e) {  
                                String prop = e.getPropertyName();  
  
                                if (dialog.isVisible()  
                                 && (e.getSource() == optionPane)  
                                 && (JOptionPane.VALUE_PROPERTY.equals(prop))) {  
                                    //如果你要阻止关闭按钮,可以在这里进行处理。   
                                      
                                    dialog.setVisible(false);  
                                }  
                            }  
                        });  
                    dialog.pack();  
                    dialog.setLocationRelativeTo(frame);  
                    dialog.setVisible(true);  
                      
                    int value = ((Integer)optionPane.getValue()).intValue();  
                    if (value == JOptionPane.YES_OPTION) {  
                        setLabel("好的");  
                    } else if (value == JOptionPane.NO_OPTION) {  
                        setLabel("试图点击关闭按钮来关闭一个不能关闭的对话框!"  
                                 + "你不能!");  
                    } else {  
                        setLabel("窗体可以使用ESC键关闭。");  
                    }  
  
                 //自己定义版面   
                } else if (command == customOptionCommand) {  
                    customDialog.setLocationRelativeTo(frame);  
                    customDialog.setVisible(true);  
  
                    String s = customDialog.getValidatedText();  
                    if (s != null) {  
                        //The text is valid.   
                        setLabel("欢迎你!"  
                                 + "你已经进入了\""  
                                 + s  
                                 + "\"。");  
                    }  
  
                //没有模式   
                } else if (command == nonModalCommand) {  
                    //创建一个对话框   
                    final JDialog dialog = new JDialog(frame,  
                                                       "一个没有模式的对话框");  
                    //使用html语言来显示信息   
                    JLabel label = new JLabel("<html><p align=center>"  
                        + "这是一个没有模式的对话框"  
                        + "你可以使用更多的格式"  
                        + "甚至可以使用主窗体!");  
                    label.setHorizontalAlignment(JLabel.CENTER);  
                    Font font = label.getFont();  
                      
                    label.setFont(label.getFont().deriveFont(font.PLAIN,  
                                                             14.0f));  
  
                    JButton closeButton = new JButton("关闭");  
                    closeButton.addActionListener(new ActionListener() {  
                        public void actionPerformed(ActionEvent e) {  
                            dialog.setVisible(false);  
                            dialog.dispose();  
                        }  
                    });  
                    JPanel closePanel = new JPanel();  
                    closePanel.setLayout(new BoxLayout(closePanel,  
                                                       BoxLayout.LINE_AXIS));  
                    closePanel.add(Box.createHorizontalGlue());  
                    closePanel.add(closeButton);  
                    closePanel.setBorder(BorderFactory.  
                        createEmptyBorder(0,0,5,5));  
  
                    JPanel contentPane = new JPanel(new BorderLayout());  
                    contentPane.add(label, BorderLayout.CENTER);  
                    contentPane.add(closePanel, BorderLayout.PAGE_END);  
                    contentPane.setOpaque(true);  
                    dialog.setContentPane(contentPane);  
  
                    //显示窗体   
                    dialog.setSize(new Dimension(300, 150));  
                    dialog.setLocationRelativeTo(frame);  
                    dialog.setVisible(true);  
                }  
            }  
        });  
  
        return createPane(moreDialogDesc + ":",  
                          radioButtons,  
                          showItButton);  
    }  
  
    public static void main(String[] args) {  
  
        JFrame.setDefaultLookAndFeelDecorated(true);  
        JDialog.setDefaultLookAndFeelDecorated(true);  
  
        //创建和设置一个窗体   
        JFrame frame = new JFrame("DialogDemo");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        //设置一个面板   
        Container contentPane = frame.getContentPane();  
        contentPane.setLayout(new GridLayout(1,1));  
        contentPane.add(new DialogDemo(frame));  
  
        //显示窗体   
        frame.pack();  
        frame.setVisible(true);  
    }  
}  


 

package test17;  
  
import java.io.*;  
import java.awt.*;  
import java.awt.event.*;  
import javax.swing.*;  
/** 
 * Title: 文件对话框演示 
 * Description: 演示打开文件对话框和保存文件对话框,使用了文件过滤。 
 * Filename: FileChooserDemo.java 
 */  
  
public class FileChooserDemo extends JPanel  
                             implements ActionListener {  
  
    private static final long serialVersionUID = 1L;  
    static private final String newline = "\n";  
    JButton openButton, saveButton;  
    JTextArea log;  
    JFileChooser fc;  
  
    public FileChooserDemo() {  
        super(new BorderLayout());  
  
        log = new JTextArea(15,40);  
        log.setMargin(new Insets(10,10,10,10));  
        log.setEditable(false);  
        JScrollPane logScrollPane = new JScrollPane(log);  
  
        //创建一个文件过滤,使用当前目录   
        fc = new JFileChooser(".");  
        //过滤条件在MyFilter类中定义   
        fc.addChoosableFileFilter(new MyFilter());  
  
        openButton = new JButton("打开文件",  
                                 createImageIcon("images/Open16.gif"));  
        openButton.addActionListener(this);  
  
        saveButton = new JButton("保存文件",  
                                 createImageIcon("images/Save16.gif"));  
        saveButton.addActionListener(this);  
  
        //构建一个面板,添加“打开文件”和“保存文件”   
        JPanel buttonPanel = new JPanel();   
        buttonPanel.add(openButton);  
        buttonPanel.add(saveButton);  
  
        add(buttonPanel, BorderLayout.PAGE_START);  
        add(logScrollPane, BorderLayout.CENTER);  
    }  
/** 
 *方法说明:事件处理 
 *输入参数: 
 *返回类型: 
 */  
    public void actionPerformed(ActionEvent e) {  
  
        //当点击“打开文件”按钮   
        if (e.getSource() == openButton) {  
            int returnVal = fc.showOpenDialog(FileChooserDemo.this);  
  
            if (returnVal == JFileChooser.APPROVE_OPTION) {  
                File file = fc.getSelectedFile();  
                //在这里添加一些对文件的处理   
                log.append("打开文件: " + file.getName() + newline);  
            } else {  
                log.append("打开文件被用户取消!" + newline);  
            }  
  
        //点击“保存文件”按钮   
        } else if (e.getSource() == saveButton) {  
            int returnVal = fc.showSaveDialog(FileChooserDemo.this);  
            if (returnVal == JFileChooser.APPROVE_OPTION) {  
                File file = fc.getSelectedFile();  
                //在这里添加一些对文件的处理   
                log.append("保存文件: " + file.getName()  + newline);  
            } else {  
                log.append("保存文件被用户取消!" + newline);  
            }  
        }  
    }  
/** 
 *方法说明:获取图像对象 
 *输入参数:String path 图片路径 
 *返回类型:ImageIcon 图片对象 
 */  
    protected static ImageIcon createImageIcon(String path) {  
        java.net.URL imgURL = FileChooserDemo.class.getResource(path);  
        if (imgURL != null) {  
            return new ImageIcon(imgURL);  
        } else {  
            System.err.println("Couldn't find file: " + path);  
            return null;  
        }  
    }  
  
    public static void main(String[] args) {  
        JFrame.setDefaultLookAndFeelDecorated(true);  
        JDialog.setDefaultLookAndFeelDecorated(true);  
  
        //创建窗体   
        JFrame frame = new JFrame("FileChooserDemo");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        //创建一个面板   
        JComponent newContentPane = new FileChooserDemo();  
        newContentPane.setOpaque(true);  
        frame.setContentPane(newContentPane);  
  
        //显示窗体   
        frame.pack();  
        frame.setVisible(true);  
    }  
}  


 

package test17;  
  
import java.io.File;  
import javax.swing.filechooser.*;  
/** 
 * Title: 文件过滤器演示 
 * Description: FileChooserDemo文件使用的文件过滤器 
 * Filename: MyFilter.java 
 */  
  
public class MyFilter extends FileFilter {  
   @SuppressWarnings("unused")  
private String files;  
   public boolean accept(File f) {  
        if (f.isDirectory()) {  
            return true;  
        }  
  
        String extension = getExtension(f);  
        if (extension != null) {  
              
            if (extension.equals("java")) {//定义过滤Java文件   
                    return true;  
            } else {  
                return false;  
            }  
  
        }  
  
        return false;  
    }  
  
    //过滤器描述   
    public String getDescription() {  
        return "Java";  
    }  
/** 
 *方法说明:获取文件扩展名 
 */  
    public static String getExtension(File f) {  
        String ext = null;  
        String s = f.getName();  
        int i = s.lastIndexOf('.');  
  
        if (i > 0 &&  i < s.length() - 1) {  
            ext = s.substring(i+1).toLowerCase();  
        }  
        return ext;  
    }  
}  


 

package test18;  
  
import javax.swing.*;  
import java.awt.*;  
import java.awt.event.*;  
/** 
 * Description: 这里演示使用html语言在swing面板上构造显示信息 
 * Filename: HtmlDemo.java 
 */  
  
public class HtmlDemo extends JPanel  
                      implements ActionListener {  
  
    private static final long serialVersionUID = 1L;  
    JLabel theLabel;  
    JTextArea htmlTextArea;  
/** 
 *方法说明:构造器,描述窗体中的成员 
 *输入参数: 
 *返回类型: 
 */  
    public HtmlDemo() {  
        setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));  
  
        String initialText = "<html>\n" +  
                "颜色和字体测试:\n" +  
                "<ul>\n" +  
                "<li><font color=red>red</font>\n" +  
                "<li><font color=blue>blue</font>\n" +  
                "<li><font color=green>green</font>\n" +  
                "<li><font size=-2>small</font>\n" +  
                "<li><font size=+2>large</font>\n" +  
                "<li><i>italic</i>\n" +  
                "<li><b>bold</b>\n" +  
                "</ul>\n";  
        //定义一个文本框   
        htmlTextArea = new JTextArea(10, 20);  
        htmlTextArea.setText(initialText);  
        JScrollPane scrollPane = new JScrollPane(htmlTextArea);  
        //定义按钮   
        JButton changeTheLabel = new JButton("改变显示");  
        changeTheLabel.setMnemonic(KeyEvent.VK_C);  
        changeTheLabel.setAlignmentX(Component.CENTER_ALIGNMENT);  
        changeTheLabel.addActionListener(this);  
        //定义标签   
        theLabel = new JLabel(initialText) {  
           
            private static final long serialVersionUID = 1L;  
            public Dimension getPreferredSize() {  
                return new Dimension(200, 200);  
            }  
            public Dimension getMinimumSize() {  
                return new Dimension(200, 200);  
            }  
            public Dimension getMaximumSize() {  
                return new Dimension(200, 200);  
            }  
        };  
        //设置标签的对齐方式   
        theLabel.setVerticalAlignment(SwingConstants.CENTER);  
        theLabel.setHorizontalAlignment(SwingConstants.CENTER);  
        //构造一个带边框的左边的编辑面板   
        JPanel leftPanel = new JPanel();  
        leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.PAGE_AXIS));  
        leftPanel.setBorder(BorderFactory.createCompoundBorder(  
                BorderFactory.createTitledBorder(  
                    "编辑HTML,点击按钮显示结果。"),  
                BorderFactory.createEmptyBorder(10,10,10,10)));  
        leftPanel.add(scrollPane);  
        leftPanel.add(Box.createRigidArea(new Dimension(0,10)));  
        leftPanel.add(changeTheLabel);  
         //构造一个带边框的右边显示的面板   
        JPanel rightPanel = new JPanel();  
        rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.PAGE_AXIS));  
        rightPanel.setBorder(BorderFactory.createCompoundBorder(  
                        BorderFactory.createTitledBorder("这里使用标签显示HTML结果"),  
                        BorderFactory.createEmptyBorder(10,10,10,10)));  
        rightPanel.add(theLabel);  
          
        setBorder(BorderFactory.createEmptyBorder(10,10,10,10));  
        add(leftPanel);  
        add(Box.createRigidArea(new Dimension(10,0)));  
        add(rightPanel);  
    }  
/** 
 *方法说明:事件监听,当用户点击按钮触发 
 *输入参数: 
 *返回类型: 
 */  
    public void actionPerformed(ActionEvent e) {  
        theLabel.setText(htmlTextArea.getText());  
    }  
/** 
 *方法说明:主方法 
 *输入参数: 
 *返回类型: 
 */  
    public static void main(String[] args) {  
  
        JFrame.setDefaultLookAndFeelDecorated(true);  
  
        //创建窗体   
        JFrame frame = new JFrame("HtmlDemo");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        //创建面板   
        JComponent newContentPane = new HtmlDemo();  
        newContentPane.setOpaque(true);  
        frame.setContentPane(newContentPane);  
  
        //显示窗体   
        frame.pack();  
        frame.setVisible(true);  
    }  
}  


 

package test19;  
  
import java.awt.*;  
import java.awt.event.*;  
import javax.swing.JPopupMenu;  
import javax.swing.JMenu;  
import javax.swing.JMenuItem;  
import javax.swing.JCheckBoxMenuItem;  
import javax.swing.JRadioButtonMenuItem;  
import javax.swing.ButtonGroup;  
import javax.swing.JMenuBar;  
import javax.swing.KeyStroke;  
import javax.swing.ImageIcon;  
  
import javax.swing.JPanel;  
import javax.swing.JTextArea;  
import javax.swing.JScrollPane;  
import javax.swing.JFrame;  
/** 
 * Title: 菜单演示 
 * Description: 演示菜单的建立和快捷键的使用。 
 * Filename: MenuDemo.java 
 */  
  
public class MenuDemo implements ActionListener, ItemListener {  
    JTextArea output;  
    JScrollPane scrollPane;  
    String newline = "\n";  
/** 
 *方法说明:组建菜单栏 
 *输入参数: 
 *返回类型: 
 */  
    public JMenuBar createMenuBar() {  
        JMenuBar menuBar;  
        JMenu menu, submenu;  
        JMenuItem menuItem;  
        JRadioButtonMenuItem rbMenuItem;  
        JCheckBoxMenuItem cbMenuItem;  
  
        //定义菜单条   
        menuBar = new JMenuBar();  
  
        //定义第一个菜单   
        menu = new JMenu("(A)菜单");  
        menu.setMnemonic(KeyEvent.VK_A);  
        menuBar.add(menu);  
  
        //下面开始定义菜单项   
          
        //只有文字   
        menuItem = new JMenuItem("(O)只有文本的菜单",  
                                 KeyEvent.VK_O);  
        //设置快捷键   
        menuItem.setAccelerator(KeyStroke.getKeyStroke(  
                KeyEvent.VK_1, ActionEvent.ALT_MASK));  
        //添加监听   
        menuItem.addActionListener(this);  
        menu.add(menuItem);  
        //有图标还有文字   
        ImageIcon icon = createImageIcon("images/middle.gif");  
        menuItem = new JMenuItem("(B)有图标和文字的菜单", icon);  
        menuItem.setMnemonic(KeyEvent.VK_B);  
        menuItem.addActionListener(this);  
        menu.add(menuItem);  
        //只有图标   
        menuItem = new JMenuItem(icon);  
        menuItem.setMnemonic(KeyEvent.VK_D);  
        menuItem.addActionListener(this);  
        menu.add(menuItem);  
  
        //定义一组radio button(单选按钮)菜单   
        menu.addSeparator();  
        ButtonGroup group = new ButtonGroup();  
  
        rbMenuItem = new JRadioButtonMenuItem("(R)使用radio的菜单");  
        rbMenuItem.setSelected(true);  
        rbMenuItem.setMnemonic(KeyEvent.VK_R);  
        group.add(rbMenuItem);  
        rbMenuItem.addActionListener(this);  
        menu.add(rbMenuItem);  
  
        rbMenuItem = new JRadioButtonMenuItem("(d)另外一个radio菜单");  
        rbMenuItem.setMnemonic(KeyEvent.VK_D);  
        group.add(rbMenuItem);  
        rbMenuItem.addActionListener(this);  
        menu.add(rbMenuItem);  
  
        //定义一组check box(检查盒)菜单   
        menu.addSeparator();  
        cbMenuItem = new JCheckBoxMenuItem("(C)使用检查盒的菜单");  
        cbMenuItem.setMnemonic(KeyEvent.VK_C);  
        cbMenuItem.addItemListener(this);  
        menu.add(cbMenuItem);  
  
        cbMenuItem = new JCheckBoxMenuItem("(H)另外一个检查盒");  
        cbMenuItem.setMnemonic(KeyEvent.VK_H);  
        cbMenuItem.addItemListener(this);  
        menu.add(cbMenuItem);  
  
        //定义一个带子菜单   
        menu.addSeparator();  
        submenu = new JMenu("(S)带有子菜单");  
        submenu.setMnemonic(KeyEvent.VK_S);  
        //定义子菜单   
        menuItem = new JMenuItem("这是子菜单");  
        //定义快捷键   
        menuItem.setAccelerator(KeyStroke.getKeyStroke(  
                KeyEvent.VK_2, ActionEvent.ALT_MASK));  
        menuItem.addActionListener(this);  
        submenu.add(menuItem);  
  
        menuItem = new JMenuItem("子菜单项");  
        menuItem.addActionListener(this);  
        submenu.add(menuItem);  
        menu.add(submenu);  
  
        //定义第二个菜单   
        menu = new JMenu("(N)第二个菜单");  
        menu.setMnemonic(KeyEvent.VK_N);  
        menuBar.add(menu);  
  
        return menuBar;  
    }  
/** 
 *方法说明:构建面板 
 *输入参数: 
 *返回类型: 
 */  
    public Container createContentPane() {  
        //构造一个面板   
        JPanel contentPane = new JPanel(new BorderLayout());  
        contentPane.setOpaque(true);  
  
        //定义一个文本域   
        output = new JTextArea(5, 30);  
        output.setEditable(false);  
        scrollPane = new JScrollPane(output);  
  
        //将文本域添加到面板中   
        contentPane.add(scrollPane, BorderLayout.CENTER);  
  
        return contentPane;  
    }  
/** 
 *方法说明:构建弹出菜单 
 *输入参数: 
 *返回类型: 
 */  
    public void createPopupMenu() {  
        JMenuItem menuItem;  
  
        //构件弹出菜单   
        JPopupMenu popup = new JPopupMenu();  
        ImageIcon openicon = createImageIcon("images/Open16.gif");  
        menuItem = new JMenuItem("打开文件",openicon);  
        menuItem.addActionListener(this);  
        popup.add(menuItem);  
        ImageIcon saveicon = createImageIcon("images/Save16.gif");  
        menuItem = new JMenuItem("保存文件",saveicon);  
        menuItem.addActionListener(this);  
        popup.add(menuItem);  
  
        //添加一个监听给文本域,以便点击右键时响应   
        MouseListener popupListener = new PopupListener(popup);  
        output.addMouseListener(popupListener);  
    }  
/** 
 *方法说明:监听普通的菜单选择 
 *输入参数:ActionEvent e 事件 
 *返回类型: 
 */  
    public void actionPerformed(ActionEvent e) {  
        JMenuItem source = (JMenuItem)(e.getSource());  
        String s = "监测事件。"  
                   + newline  
                   + "    事件源: " + source.getText()  
                   + " (选择对象" + getClassName(source) + ")";  
        output.append(s + newline);  
    }  
/** 
 *方法说明:监听检查盒菜单选择项 
 *输入参数:ItemEvent e 检查盒触发的事件 
 *返回类型: 
 */  
    public void itemStateChanged(ItemEvent e) {  
        JMenuItem source = (JMenuItem)(e.getSource());  
        String s = "菜单项监听"  
                   + newline  
                   + "    事件源: " + source.getText()  
                   + " (选择对象 " + getClassName(source) + ")"  
                   + newline  
                   + "    新的状态: "  
                   + ((e.getStateChange() == ItemEvent.SELECTED) ?  
                     "选择":"不选择");  
        output.append(s + newline);  
    }  
/** 
 *方法说明:获得类的名字 
 *输入参数: 
 *返回类型: 
 */  
    protected String getClassName(Object o) {  
        String classString = o.getClass().getName();  
        int dotIndex = classString.lastIndexOf(".");  
        return classString.substring(dotIndex+1);  
    }  
/** 
 *方法说明:根据路径查找图片 
 *输入参数:String path 图片的路径 
 *返回类型:ImageIcon 图片对象 
 */  
    protected static ImageIcon createImageIcon(String path) {  
        java.net.URL imgURL = MenuDemo.class.getResource(path);  
        if (imgURL != null) {  
            return new ImageIcon(imgURL);  
        } else {  
            System.err.println("Couldn't find file: " + path);  
            return null;  
        }  
    }  
  
    public static void main(String[] args) {  
        JFrame.setDefaultLookAndFeelDecorated(true);  
  
        //创建一个窗体   
        JFrame frame = new JFrame("MenuDemo");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        //创建菜单,并添加到面板中   
        MenuDemo demo = new MenuDemo();  
        frame.setJMenuBar(demo.createMenuBar());  
        frame.setContentPane(demo.createContentPane());  
  
        //生成弹出菜单   
        demo.createPopupMenu();  
  
        //显示窗体   
        frame.setSize(450, 260);  
        frame.setVisible(true);  
    }  
//弹出菜单监听类   
    class PopupListener extends MouseAdapter {  
        JPopupMenu popup;  
  
        PopupListener(JPopupMenu popupMenu) {  
            popup = popupMenu;  
        }  
          
        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.getComponent(),  
                           e.getX(), e.getY());  
            }  
        }  
    }  
}  


 

package test20;  
  
import javax.swing.JToolBar;  
import javax.swing.JButton;  
import javax.swing.ImageIcon;  
  
import javax.swing.JFrame;  
import javax.swing.JTextArea;  
import javax.swing.JScrollPane;  
import javax.swing.JPanel;  
  
import java.net.URL;  
  
import java.awt.*;  
import java.awt.event.*;  
/** 
 * Title: 工具栏演示 
 * Description: 提供一个工具栏,包括“打开”、“保存”、“搜索”工具按钮 
 * Filename: ToolBarDemo.java 
 */  
public class ToolBarDemo extends JPanel  
                         implements ActionListener {  
  
    private static final long serialVersionUID = 1L;  
    protected JTextArea textArea;  
    protected String newline = "\n";  
    static final private String OPEN = "OPEN";  
    static final private String SAVE = "SAVE";  
    static final private String SEARCH = "SEARCH";  
/** 
 *方法说明:构造器 
 *输入参数: 
 *返回类型: 
 */  
    public ToolBarDemo() {  
        super(new BorderLayout());  
  
        //创建工具栏   
        JToolBar toolBar = new JToolBar();  
        addButtons(toolBar);  
  
        //创建一个文本域,用来输出一些信息   
        textArea = new JTextArea(15, 30);  
        textArea.setEditable(false);  
        JScrollPane scrollPane = new JScrollPane(textArea);  
  
        //安放成员   
        setPreferredSize(new Dimension(450, 110));  
        add(toolBar, BorderLayout.PAGE_START);  
        add(scrollPane, BorderLayout.CENTER);  
    }  
/** 
 *方法说明:构建工具栏 
 *输入参数:JToolBar toolBar 工具条 
 *返回类型: 
 */  
    protected void addButtons(JToolBar toolBar) {  
        JButton button = null;  
  
        //第一个按钮,“打开”   
        button = makeNavigationButton("Open16", OPEN,  
                                      "打开一个文件!",  
                                      "打开");  
        toolBar.add(button);  
  
        //第二个按钮,“保存”   
        button = makeNavigationButton("Save16", SAVE,  
                                      "保存当前文件!",  
                                      "保存");  
        toolBar.add(button);  
  
        //第三个按钮,“搜索”   
        button = makeNavigationButton("Search16", SEARCH,  
                                      "搜索文件中的字符!",  
                                      "搜索");  
        toolBar.add(button);  
    }  
/** 
 *方法说明:构造工具栏上的按钮 
 *输入参数: 
 *返回类型: 
 */  
    protected JButton makeNavigationButton(String imageName,  
                                           String actionCommand,  
                                           String toolTipText,  
                                           String altText) {  
        //搜索图片   
        String imgLocation = "images/"  
                             + imageName  
                             + ".gif";  
        URL imageURL = ToolBarDemo.class.getResource(imgLocation);  
  
        //初始化工具按钮   
        JButton button = new JButton();  
        //设置按钮的命令   
        button.setActionCommand(actionCommand);  
        //设置提示信息   
        button.setToolTipText(toolTipText);  
        button.addActionListener(this);  
          
        if (imageURL != null) {                      //找到图像   
            button.setIcon(new ImageIcon(imageURL));  
        } else {                                     //没有图像   
            button.setText(altText);  
            System.err.println("Resource not found: "  
                               + imgLocation);  
        }  
  
        return button;  
    }  
/** 
 *方法说明:事件监听 
 *输入参数: 
 *返回类型: 
 */  
    public void actionPerformed(ActionEvent e) {  
        String cmd = e.getActionCommand();  
        String description = null;  
  
        if (OPEN.equals(cmd)) { //点击第一个按钮   
            description = "打开一个文件操作!";  
        } else if (SAVE.equals(cmd)) { //点击第二个按钮   
            description = "保存文件操作";  
        } else if (SEARCH.equals(cmd)) { //点击第三个按钮   
            description = "搜索字符操作";  
        }  
  
        displayResult("如果这里是真正的程序,你将进入: "  
                        + description);  
    }  
  
    protected void displayResult(String actionDescription) {  
        textArea.append(actionDescription + newline);  
    }  
  
    public static void main(String[] args) {  
        JFrame.setDefaultLookAndFeelDecorated(true);  
  
        //定义窗体   
        JFrame frame = new JFrame("ToolBarDemo");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        //定义面板   
        ToolBarDemo newContentPane = new ToolBarDemo();  
        newContentPane.setOpaque(true);  
        frame.setContentPane(newContentPane);  
  
        //显示窗体   
        frame.pack();  
        frame.setVisible(true);  
    }  
}  


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值