- 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);
- }
- }