100个java经典实例(11-20)

1、按钮演示:提供一个按钮演示,如何实现按钮和一个按钮失效的

package com.day02;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.net.URL;

import javax.swing.AbstractButton;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ButtonDemo extends JPanel implements ActionListener{
	private static final long serialVersionUID = 1L;
	protected JButton b1, b2, b3;
	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);  
	}
	/**
	 * 构造器,初始图形界面构建 
	 */
	public ButtonDemo(){
		ImageIcon leftButton = createImageIcon("/images/img1.png");
		ImageIcon middleButton = createImageIcon("/images/img2.png");
		ImageIcon rightButton = createImageIcon("/images/img3.png");
		b1 = new JButton("失效中间按钮(D)", leftButton);
		//水平中间对齐
		b1.setVerticalTextPosition(AbstractButton.CENTER);
		//相当于left
		b1.setHorizontalTextPosition(AbstractButton.LEADING);
		//将b1邦定alt+D键  
		b1.setMnemonic(KeyEvent.VK_D);
		b1.setActionCommand("disable");
		
		b2 = new JButton("M中间按钮",middleButton);
		b2.setVerticalTextPosition(AbstractButton.BOTTOM);
		b2.setHorizontalTextPosition(AbstractButton.CENTER);
		//将b2邦定alt+M键  
		b2.setMnemonic(KeyEvent.VK_K);
		
		b3 = new JButton("E激活中间按钮",rightButton);
		b3.setMnemonic(KeyEvent.VK_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);  
	}
	/**
	 * 事件处理 
	 */
	@Override
	public void actionPerformed(ActionEvent ae) {
		if("disable".equals(ae.getActionCommand())){
			b2.setEnabled(false);
			b1.setEnabled(false);
			b3.setEnabled(true);
		}else {
			b2.setEnabled(true);
			b1.setEnabled(true);
			b3.setEnabled(false);
		}
	}
	/**
	 * 创建图标
	 */
	protected static ImageIcon createImageIcon(String path){
		URL imgUrl = ButtonDemo.class.getResource(path);
		if (imgUrl != null) {
			return new ImageIcon(imgUrl);
		}else{
			System.err.println("Couldn't find file: " + path);
			return null;
		}
	}

}

2、检查盒演示:选择不同的选择框显示不同的图片

package com.day02;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CheckBoxDemo extends JPanel implements ItemListener {
	   
		private static final long serialVersionUID = 1L;
		JCheckBox chinButton;
	    JCheckBox glassesButton;
	    JCheckBox hairButton;
	    JCheckBox teethButton;
	    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));
	    }
		/**
		 *方法说明:监听检查盒事件,拼凑图片的文件名XXXX部分
		 */
	    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();
	    }
		/**
		 *方法说明:绘制图片
		 */
	    protected void updatePicture() {
	        //将得到的图片制成图标
	        ImageIcon icon = createImageIcon("/images/geek-"+ choices.toString()+ ".png");
	        pictureLabel.setIcon(icon);
	        pictureLabel.setToolTipText(choices.toString());
	        if (icon == null) {
	            pictureLabel.setText("没有发现图片");
	        } else {
	            pictureLabel.setText(null);
	        }
	    }
		/**
		 *方法说明:获取图标
		 */
	    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;
	        }
	    }
		/**
		 *方法说明:主方法
		 */
	    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);
	    }
}

3、下拉域演示:通过选择或这输入一种日期格式来格式化今天的日期

package com.day02;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ComboBoxDemo extends JPanel implements ActionListener {
	private static final long serialVersionUID = 1L;
	public static JFrame frame;
	public JLabel result;
	public 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 label1 = new JLabel("输入一个字符格式或者");
		JLabel label2 = new JLabel("从下拉列表中选择一种:");
		JComboBox<String> patternList = new JComboBox<String>(patternExamples);
		// 标注这里ComboBox可进行编辑
		patternList.setEditable(true);
		patternList.addActionListener(this);
		// 创建一个显示结果用户界面
		JLabel resultLabel = new JLabel("当前 日期/时间", JLabel.LEADING);
		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(label1);
		patternPanel.add(label2);
		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();
	}

	/**
	 * 事件处理
	 */
	@Override
	@SuppressWarnings("unchecked")
	public void actionPerformed(ActionEvent ae) {
		JComboBox<ActionEvent> cb = (JComboBox<ActionEvent>) ae.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);
	}
}
4、列表框: 通过输入框添加元素和点击“删除”按钮删除列表元素
package com.day02;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
/**
 *列表框: 通过输入框添加元素和点击“删除”按钮删除列表元素
 */
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中有重名元素
	 */
    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);
    }
}




  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值