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 patternList = new JComboBox(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 cb = (JComboBox) 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);
}
}