100個java經典例項(11-20)
阿新 • • 發佈:2019-01-31
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、下拉域演示:通過選擇或這輸入一種日期格式來格式化今天的日期
4、列表框: 通過輸入框新增元素和點選“刪除”按鈕刪除列表元素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); } }
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);
}
}