实验五Java事件处理_第1页
实验五Java事件处理_第2页
实验五Java事件处理_第3页
实验五Java事件处理_第4页
实验五Java事件处理_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验五 Java事件处理实验目的1 掌握Java语言中的事件处理方法2 掌握Java语言中事件源、监视器和处理事件的接口的概念实验内容1. 图形用户界面设计程序(ArtFont.java)在实验三第1题的基础上,添加事件处理机制,并逐步完善程序功能。分别用ArtFont类的对象做监视器和匿名内部类的对象做监视器实现。要求实现如下功能:l 当在文本框中输入文字后回车,在文本域中显示输入的文字。l 当分别选择粗体和斜体复选框时,文本域中的文字分别显示粗体和斜体样式。l 当点击颜色按钮时,出现颜色选择对话框,选择需要的颜色,按确定按钮后,按钮的前景色和文本域的前景色设置为选定的颜色。l 当选择字体样

2、式下拉框中的某一字体样式时,文本域中的文字设置为指定的字体样式。l 当选择字体大小下拉框中的某一字体大小时,文本域中的文字设置为指定的字体大小。l 当选择窗体样式下拉框中的某一窗体效果时,窗体外观改变为指定的窗体外观。图1 程序界面运行效果package Sy;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class ArtFont extends JFrame static ArtFont artFont;JComboBox fontType;/字体样式下拉框 JComboBox fontSize;

3、/字体大小下拉框JComboBox windowStyle;/窗体样式下拉框JCheckBox boldBx;/ 粗体按钮JCheckBox italicBx;/ 斜体按钮JButton colorBtn;/ 颜色按钮String fontNames;/ 字体名称String fontSizes;/ 字体大小JLabel label;/ 输入提示标签JTextField inputText;/ 文字输入框JTextArea txtArea;/ 文字显示区JPanel northPanel;/ 字体设置JPanel centerPanel;/ 显示效果区JPanel southPanel;/样式

4、设置Font font;int boldStyle, italicStyle;int fontSizeStyle;String fontNameStyle;Color colorStyle = Color.black;/ 设置字体的默认颜色为黑色String style = "默认显示效果", "Windows显示效果", "Unix显示效果" ;public ArtFont() super("字体设置");/ 设置默认字体boldStyle = 0;italicStyle = 0;fontSizeStyle =

5、10;fontNameStyle = "宋体"font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);northPanel = getNorthPanel();centerPanel = getCenterPanel();southPanel = getSouthPanel();/ 设置容器Container container = getContentPane();container.setLayout(new BorderLayout();add(northPanel , Border

6、Layout.NORTH);/将northPanel添加到窗体的北部add(centerPanel , BorderLayout.CENTER);/将centerPanel添加到窗体的中部add(southPanel , BorderLayout.SOUTH);/将southPanel添加到窗体的南部setSize(500, 300);setLocationRelativeTo(null);/将窗体位于屏幕的中央setVisible(true);private JPanel getNorthPanel() JPanel panel = new JPanel();label = new JLab

7、el("输入");inputText = new JTextField(10);boldBx = new JCheckBox("粗体");italicBx = new JCheckBox("斜体");colorBtn = new JButton("颜色");inputText.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) / 文本输入txtArea.setText(inputText

8、.getText(););boldBx.addItemListener(new ItemListener() Overridepublic void itemStateChanged(ItemEvent e) / 加粗if(e.getStateChange() = ItemEvent.SELECTED)boldStyle = 1;elseboldStyle = 0;font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);txtArea.setFont(font););italicBx.addItemListe

9、ner(new ItemListener() Overridepublic void itemStateChanged(ItemEvent e) / 斜体if(e.getStateChange() = ItemEvent.SELECTED)italicStyle = 1;elseitalicStyle = 0;font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);txtArea.setFont(font););colorBtn.addActionListener(new ActionListener() O

10、verridepublic void actionPerformed(ActionEvent e) / 改变颜色colorStyle = JColorChooser.showDialog(null, "请选择一种颜色", colorStyle); colorBtn.setForeground(colorStyle); txtArea.setForeground(colorStyle); font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);txtArea.setFont(font););

11、panel.add(label);panel.add(inputText);panel.add(boldBx);panel.add(italicBx);panel.add(colorBtn);return panel;private JPanel getCenterPanel() JPanel panel = new JPanel();panel.setLayout(new BorderLayout();txtArea = new JTextArea();panel.add(new JScrollPane(txtArea) , BorderLayout.CENTER);return panel

12、;private JPanel getSouthPanel() JPanel panel = new JPanel();/获得系统默认字体GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();fontNames = ge.getAvailableFontFamilyNames();fontType = new JComboBox(fontNames);/设置字体大小fontSizes = new String63;for (int i = 0; i < fontSizes.length; i+

13、) fontSizesi = Integer.toString(i+10);fontSize = new JComboBox(fontSizes);windowStyle = new JComboBox(style);fontType.addItemListener(new ItemListener() Overridepublic void itemStateChanged(ItemEvent e) / 字体的类型fontNameStyle = (String) e.getItem(); font = new Font(fontNameStyle, boldStyle + italicSty

14、le, fontSizeStyle);txtArea.setFont(font););fontSize.addItemListener(new ItemListener() Overridepublic void itemStateChanged(ItemEvent e) / 字体的大小String s = (String) e.getItem();fontSizeStyle = Integer.parseInt(s); font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);txtArea.setFont(

15、font););windowStyle.addItemListener(new ItemListener() Overridepublic void itemStateChanged(ItemEvent e) / 改变窗口String s = (String) e.getItem();String className = ""if (s.equals("Windows显示效果")className = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"else if (s.equa

16、ls("Unix显示效果")className = "com.sun.java.swing.plaf.motif.MotifLookAndFeel"else if (s.equals("默认显示效果")className = UIManager.getCrossPlatformLookAndFeelClassName();try UIManager.setLookAndFeel(className);SwingUtilities.updateComponentTreeUI(artFont); catch (Exception de)

17、System.out.println("Exception happened!"););panel.add(fontType);panel.add(fontSize);panel.add(windowStyle);return panel;public static void main(String args) artFont = new ArtFont();artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);2. 日历应用程序设计在实验三第2题的基础上,添加事件处理机制,并逐步完善程序功能。分别用CalendarF

18、rame类的对象做监视器和匿名内部类的对象做监视器实现。要求实现如下功能:l 在文本框inputYear中输入年份,验证年份的有效性;按回车键后,显示输入年份的正确日历l 单击previousMonth按钮可以显示当前月的上一月的日历;如果月份小于1,则显示上一年的12月l 单击nextMonth按钮,可以显示当前月的下一月的日历;如果月份大于1,则显示下一年的1月CalendarBean.javapackage Sy;import java.util.Calendar;public class CalendarBean String day;int year = 2013, month =

19、0;public void setYear(int year) this.year = year;public int getYear() return year;public void setMonth(int month) this.month = month;public int getMonth() return month;/返回某年某月1号开始的日期数组public String getCalendar() String a = new String42;Calendar 日历 = Calendar.getInstance();/注意:1月份是从0开始,所以要减1日历.set(ye

20、ar, month - 1, 1);int 星期几 = 日历.get(Calendar.DAY_OF_WEEK) - 1;int day = 0;if (month = 1 | month = 3 | month = 5 | month = 7 | month = 8 | month = 10 | month = 12) day = 31;if (month = 4 | month = 6 | month = 9 | month = 11) day = 30;if (month = 2) if (year % 4 = 0) && (year % 100 != 0) | (yea

21、r % 400 = 0) day = 29; else day = 28;for (int i = 星期几, n = 1; i < 星期几 + day; i+) ai = String.valueOf(n);n+;return a;CalendarFrame.javapackage Sy;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class CalendarFrame extends Frame Label labelDay = new Label42;Label labelYear;But

22、ton titleName = new Button7;Button nextMonth, previousMonth;Label showMessage;TextField inputYear;CalendarBean calendar;String name = "日", "一", "二", "三", "四", "五", "六" ;int year = 2013, month = 1;String days;public CalendarFrame()

23、 calendar = new CalendarBean();calendar.setYear(year);calendar.setMonth(month);days = calendar.getCalendar();ScrollPane scrollPane = new ScrollPane();scrollPane.add(getCenterPanel();add(scrollPane, BorderLayout.CENTER);/ 窗口添加scrollPane在中心区域add(getNorthPanel(), BorderLayout.NORTH);/ 窗口添加pNorth 在北面区域a

24、dd(getSouthPanel(), BorderLayout.SOUTH);/ 窗口添加pSouth 在南区域。private Panel getNorthPanel() Panel panel = new Panel();labelYear = new Label("请输入年份:");inputYear = new TextField(10);previousMonth = new Button("上月");nextMonth = new Button("下月");inputYear.addActionListener(new

25、ActionListener() public void actionPerformed(ActionEvent e) / 文本输入try year = Integer.parseInt(inputYear.getText(); catch (NumberFormatException e1) JOptionPane.showMessageDialog(null, "您输入的年份有误,请重新输入!");inputYear.setFocusable(true);calendar.setYear(year);calendar.setMonth(month);days = cal

26、endar.getCalendar();for (int i = 0; i < 42; i+) labelDayi.setText(daysi);showMessage.setText("日历:" + calendar.getYear() + "年"+ calendar.getMonth() + "月"););previousMonth.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) /上月按钮month-;if(

27、month < 1)year-;month=1;calendar.setYear(year);calendar.setMonth(month);days = calendar.getCalendar();for (int i = 0; i < 42; i+) labelDayi.setText(daysi);showMessage.setText("日历:" + calendar.getYear() + "年"+ calendar.getMonth() + "月"););nextMonth.addActionListene

28、r(new ActionListener() public void actionPerformed(ActionEvent e) / 下月按钮month+;if(month > 12)year+;month=1;calendar.setYear(year);calendar.setMonth(month);days = calendar.getCalendar();for (int i = 0; i < 42; i+) labelDayi.setText(daysi);showMessage.setText("日历:" + calendar.getYear() + "年"+ calendar.getMonth() + "月"););panel.add(labelYear);panel.add(inputYear);panel.add(previousMonth);panel.add(nextMonth);return panel;private Panel getCenterPanel() Panel panel = new Panel();panel.setLayout(new Gr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论