100个Java经典例子(11-20)初学者的利器高手的宝典JavaSE,11-20javase
分享于 点击 21864 次 点评:94
100个Java经典例子(11-20)初学者的利器高手的宝典JavaSE,11-20javase
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);
}
}
相关文章
- 暂无相关文章
用户点评