(/文理学院)
《面向对象程序设计》实验指导书
(2014.3-2014.6)
2013 / 20## 学年 第 2 学期
实验课程:《面向对象程序设计》
系 别:教育信息与技术学院/信息工程系
专 业:信息工程
班 级:1102/1103/1106班
姓 名:__________
学 号:____________
指导教师:许 新 华
教育信息与技术学院
2014.9
实验项目十三 GUI设计进阶
一、实验目的及要求
1、掌握事件处理机制
2、掌握常用组件的使用
3、掌握菜单和对话框组件的使用
4、掌握选项卡组件的使用
二、实验内容和要求
1、掌握事件处理机制
//p197,例11-9,事件授权模型
import _____________.*;
import _____________.*;
import _____________.*;
//该程序为小程序,主窗口为JApplet
public class MouseKeyEventDemo extends JApplet{
private int lastX=0,lastY=0; //变量用于记录上一次的坐标位置
// init()为初始化方法,是小程序必须有的方法
public void init(){
addM______L________(new RecordFocus()); //添加获取鼠标位置的监听器
a___MouseM________Listener(new DrawLine()); //添加拖动鼠标画线的监听器
___dKeyListener(new DrawChar()); //添加敲击键盘显示字符的监听器
}
//此方法记录焦点的坐标位置
protected void record(int x,int y){
lastX=__;
lastY=__;
}
// 鼠标事件处理类
private class RecordFocus __________ MouseAdapter{
//捕获鼠标进入事件
public void mouseEntered(MouseEvent e){
record(__.getX(),__.getY()); //记录焦点的坐标位置
}
//捕获鼠标按下事件
public void mousePressed(MouseE______ e){
record(e.___X(),e.____Y()); //记录焦点的坐标位置
}
}
private class DrawLine extends MouseMotion_______{
//捕获鼠标拖拽事件
public void mouseDragged(MouseEvent e){
Graphics g=getGraphics(); //得到绘制图形对象g
g.setColor(Color.red); //设置绘制颜色为红色
int x=__.____(); //获取当前鼠标位置横坐标
int y=__.____(); //获取当前鼠标位置纵坐标
g.drawLine(lastX,lastY,x,y); //在鼠标前后两个位置间画线
record(x,y); //记录当前鼠标位置
}
}
//键盘事件处理类
private class DrawChar __________ KeyAdapter{
//捕获键盘按下事件
public void keyTyped(KeyEvent e){
Graphics g=getGraphics(); //得到绘制图形对象g
__.setColor(Color.blue); //设置绘制颜色为蓝色
String s=String.valueOf(__.getKeyChar()); //获取按键的字符
g.drawString(__,lastX,lastY); //在当前焦点位置画出字符
record(lastX+8,lastY); //记录新的焦点位置
}
}
}
l 运行结果
l 算法分析
2、常用组件的使用
//操作2,P203,例11-10,常用组件
import java.awt.__;
import javax.swing.___;
import java.awt.event.__;
import java.sql.*;
publicclass StudentFrame _______JFrame ________ ActionListener{
JLabel lblno=new _______("学号:");//学号组合框
String no[]={"20053051101","20053051102"};
JComboBox jcbno=new _______(no);
JLabel lblname=new JLabel("姓名:");//文本框
_________ txtname=new JTextField(10);
_________ lblage=new JLabel("年龄:");//下拉列表框
String age[]={"20","21","22","23","24","25","26","27","28"};
_________ jcbage=new JComboBox(age);
_________ lblsex=new JLabel("性别:");//单选按钮
__________ bgr=new ButtonGroup();
JRadioButton ckbmale=_____ JRadioButton("男",true);
JRadioButton ckbfamale=______ JRadioButton("女");
JLabel lblhobby=new JLabel("爱好:");//复选按钮
_________ rdo1=new JCheckBox("唱歌");
_________ rdo2=new JCheckBox("跳舞");
JCheckBox rdo3=new JCheckBox("篮球");
JCheckBox rdo4=new JCheckBox("读书");
JLabel lbladdr=new JLabel("地址:");//多行文本框
________ txaadd=new JTextArea(2,10);
JLabel lbledu=new JLabel("专业:");//专业列表框
String edu[]={"经济管理","计算机","信息工程"};
JList lstedu=new _______(edu);
JButton btnadd=new ________("添加");
JButton btnexit=new ________("退出");
JPanel p1=new ______(new FlowLayout(FlowLayout.LEFT));
______ p2=new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel p3=new JPanel(new FlowLayout(FlowLayout.LEFT));
______ p4=new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel p5=new JPanel(new FlowLayout(FlowLayout.CENTER));
StudentFrame(){
super("学生信息录入");
Container contentpane=____ContentPane();
contentpane.set_______(new GridLayout(5,1));
p1.___(lblno);
jcbno.setEditable(true);//设置JCheckBox可以编辑
p1.____(jcbno);
p1.add(lblname);
p1.add(txtname);
contentpane.add(p1);
p2.add(lblage);
p2.____(jcbage);
p2.____(lblsex);
p2.add(ckbmale);
p2.add(ckbfamale);
bgr.add(_______);
bgr.add(________);
contentpane.add(p2);
p3.add(______);
p3.add(______);
p3.add(_______);
p3.add(_______);
p3.add(_______);
contentpane.add(p3);
p__.add(lbladdr);
p__.add(txaadd);
p__.add(lbledu);
p4.add(lstedu);
contentpane.add(___);
btnadd.addActionListener(this);
btnexit.addActionListener(this);
p5.add(btnadd);
p5.add(btnexit);
contentpane.add(p5);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(380,260);
setVisible(true);
}
publicvoid actionPerformed(ActionEvent e){
String command=e.getActionCommand();
if(command.equals("添加")){
//完成数据库添加数据操作
}
if(command.equals("退出")){
System.exit(0);
}
}
publicstaticvoid main(String args[]){
StudentFrame s=new StudentFrame();
}
}
l 运行结果
l 算法分析
3、菜单和对话框组件的使用
//P208,例11-12,菜单与对话框的使用
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
publicclass NoteSystem extends _______ implements Action_______ {
JTextField textField;
_______ mb = new JMenuBar(); // 创建菜单条
// 创建下拉菜单
_______ m1 = new JMenu("文件"); // 创建菜单
_______ m2 = new JMenu("编辑");
_______ m3 = new JMenu("帮助");
JMenuItem mi1 = new ______("打开");// 创建菜单项
JMenuItem mi2 = new ______("保存");
JMenuItem mi3 = new _______("退出");
// 创建弹出式菜单
JPopupMenu popup = new JPopupMenu();
JMenuItem pmi1 = new JMenuItem("剪切");
JMenuItem pmi2 = new JMenuItem("复制");
JMenuItem pmi3 = new JMenuItem("粘贴");
public NoteSystem(){
super("记事本");
setJMenu____(mb);
____.add(m1);
____.add(m2);
mb.add(___);
mi1.addActionL_____(this);//对菜单注册监听器
mi2.addA_____Listener(this);
mi3.a__ActionListener(this);
m1.add(_____);
m1.add(_____);
m1.addSeparator(); //添加分隔线
m1.add(mi3);
m2.add(new JCheckBoxMenuItem("撤销")); //创建复选菜单项
m3.add("帮助主题");
m3.add("搜索");
m3.addSeparator();
m3.add("关于...");
popup.add(pmi1);
popup.add(pmi2);
popup.add(pmi3);
//实现弹出式菜单
getContentPane().addMouseListener(new MouseAdapter(){
//内嵌式类实现事件监听
publicvoid mouseReleased(MouseEvent e){
if(e.isPopupTrigger()){
popup.show(e.getComponent(),e.getX(),e.getY()); //显示弹出式菜单}
}
}});
textField=new JTextField();//创建和添加文本框
getContentPane().add(textField,BorderLayout.SOUTH);
}
publicvoid actionPerformed(ActionEvent e) {
JMenuItem select = (JMenuItem) e.getSource();
textField.setText("你选择的是:" + select.getText());
// 得到点击菜单项上的文本并显示
JFileChooser fileChooser = new JFileChooser();
// 创建文件对话框对象
if (select.equals(mi1)) { // 显示文件打开对话框
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
JOptionPane.showConfirmDialog(this, "要打开"
+ fileChooser.getSelectedFile() + "文件吗?", "文件信息",
JOptionPane.YES_NO_OPTION,
JOptionPane.INFORMATION_MESSAGE);
}
}
if (select.equals(mi2)) { // 显示文件保存对话框
if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
JOptionPane.showConfirmDialog(this, "要保存"
+ fileChooser.getSelectedFile() + "文件吗?", "文件信息",
JOptionPane.YES_NO_OPTION,
JOptionPane.INFORMATION_MESSAGE);
}
}
if (select.equals(mi3)) {
JOptionPane.showConfirmDialog(this, "真的退出吗?", "确认提示",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
}
}
publicstaticvoid main(________________) {
JFrame frame = new NoteSystem();
_______.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.set_____(600, 500);
frame.setV______(true);
}
}
l 运行结果
l 算法分析
4、了解选项卡组件
//P211,例11-14,选项卡(JTabbedPane)组件
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class JTabbed extends JFrame{
JTabbedPane help=new JTabbedPane();//创建一个空白的JTabbedPane
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
JLabel l1=new JLabel("我们是一个强大的团队!");
JLabel l2=new JLabel("本系统功能齐全。");
JLabel l3=new JLabel("与微软的选项卡风格不同。");
JTabbed(){
super("帮助主题");
p1.add(l1);
p2.add(l2);
p3.add(l3);
help.add(p1,"关于我们");//在第一个书签中添加一个面板
help.add(p2,"关于系统");//在第二个书签中添加一个面板
help.add(p3,"比较微软");//在第三个书签中添加一个面板
Container contentpane=getContentPane();
contentpane.add(help,BorderLayout.CENTER);
//将JTabbedPane添加到窗体中
setSize(400,200);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicstaticvoid main(String args[]){
_________ h=new JTabbed();
}
}
l 运行结果
l 算法分析
三、实验小结
四、教师评语及成绩
随堂测验 基础知识部分
一、目的及要求
1、测验基础知识(选择题)
2、测验基础知识(填空题)
3、原题不能省略
必须录入题干,在此基础上答题
4、题交试卷文件名规则
班级号_学号后2位_姓名,如1102_28_彭兴卫.doc,
1103_16_田翠玲.doc,
1106_37_石博文.doc。