1. 程式人生 > >100個java經典例項(11-20)

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