java事件处理实验_实验五 Java事件处理

本文档提供了两个Java事件处理的实践案例,包括ArtFont和日历应用程序。ArtFont程序实现了文本输入、字体样式选择、颜色选择等功能,通过事件监听器响应用户操作。日历应用程序允许用户输入年份,展示相应日历,并提供切换月份的功能。通过事件处理,这两个程序能够动态更新界面以反映用户的选择。
摘要由CSDN通过智能技术生成

91c942894d9f1f1a1d1083593b95ee12.gif实验五 Java事件处理

实验五 Java事件处理实验目的1 掌握Java语言中的事件处理方法2 掌握Java语言中事件源、监视器和处理事件的接口的概念实验内容1. 图形用户界面设计程序ArtFont.java在实验三第1题的基础上,添加事件处理机制,并逐步完善程序功能。分别用ArtFont类的对象做监视器和匿名内部类的对象做监视器实现。要求实现如下功能l 当在文本框中输入文字后回车,在文本域中显示输入的文字。l 当分别选择粗体和斜体复选框时,文本域中的文字分别显示粗体和斜体样式。l 当点击颜色按钮时,出现颜色选择对话框,选择需要的颜色,按确定按钮后,按钮的前景色和文本域的前景色设置为选定的颜色。l 当选择字体样式下拉框中的某一字体样式时,文本域中的文字设置为指定的字体样式。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;//字体大小下拉框JComboBox windowStyle;//窗体样式下拉框JCheckBox boldBx;// 粗体按钮JCheckBox italicBx;// 斜体按钮JButton colorBtn;// 颜色按钮String fontNames;// 字体名称String fontSizes;// 字体大小JLabel label;// 输入提示标签JTextField Text;// 文字输入框JTextArea txtArea;// 文字显示区JPanel northPanel;// 字体设置JPanel centerPanel;// 显示效果区JPanel southPanel;//样式设置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 10;fontNameStyle 宋体;font new FontfontNameStyle, boldStyle italicStyle, fontSizeStyle;northPanel getNorthPanel;centerPanel getCenterPanel;southPanel getSouthPanel;// 设置容器Container container getContentPane;container.setLayoutnew BorderLayout;addnorthPanel , BorderLayout.NORTH;//将northPanel添加到窗体的北部addcenterPanel , BorderLayout.CENTER;//将centerPanel添加到窗体的中部addsouthPanel , BorderLayout.SOUTH;//将southPanel添加到窗体的南部setSize500, 300;setLocationRelativeTonull;//将窗体位于屏幕的中央setVisibletrue;private JPanel getNorthPanel JPanel panel new JPanel;label new JLabel输入;Text new JTextField10;boldBx new JCheckBox粗体;italicBx new JCheckBox斜体;colorBtn new JButton颜色;Text.addActionListenernew ActionListener Overridepublic void actionPeredActionEvent e // 文本输入txtArea.setTextText.getText;;boldBx.addItemListenernew ItemListener Overridepublic void itemStateChangedItemEvent e // 加粗ife.getStateChange ItemEvent.SELECTEDboldStyle 1;elseboldStyle 0;font new FontfontNameStyle, boldStyle italicStyle, fontSizeStyle;txtArea.setFontfont;;italicBx.addItemListenernew ItemListener Overridepublic void itemStateChangedItemEvent e // 斜体ife.getStateChange ItemEvent.SELECTEDitalicStyle 1;elseitalicStyle 0;font new FontfontNameStyle, boldStyle italicStyle, fontSizeStyle;txtArea.setFontfont;;colorBtn.addActionListenernew ActionListener Overridepublic void actionPeredActionEvent e // 改变颜色colorStyle JColorChooser.showDialognull, 请选择一种颜色, colorStyle; colorBtn.setForegroundcolorStyle; txtArea.setForegroundcolorStyle; font new FontfontNameStyle, boldStyle italicStyle, fontSizeStyle;txtArea.setFontfont;;panel.addlabel;panel.addText;panel.addboldBx;panel.additalicBx;panel.addcolorBtn;return panel;private JPanel getCenterPanel JPanel panel new JPanel;panel.setLayoutnew BorderLayout;txtArea new JTextArea;panel.addnew JScrollPanetxtArea , BorderLayout.CENTER;return panel;private JPanel getSouthPanel JPanel panel new JPanel;//获得系统默认字体GraphicsEnvironment ge GraphicsEnvironment.getLocalGraphicsEnvironment;fontNames ge.getAvailableFontFamilyNames;fontType new JComboBoxfontNames;//设置字体大小fontSizes new String63;for int i 0; i fontSizes.length; i fontSizesi Integer.toStringi10;fontSize new JComboBoxfontSizes;windowStyle new JComboBoxstyle;fontType.addItemListenernew ItemListener Overridepublic void itemStateChangedItemEvent e // 字体的类型fontNameStyle String e.getItem; font new FontfontNameStyle, boldStyle italicStyle, fontSizeStyle;txtArea.setFontfont;;fontSize.addItemListenernew ItemListener Overridepublic void itemStateChangedItemEvent e // 字体的大小String s String e.getItem;fontSizeStyle Integer.parseInts; font new FontfontNameStyle, boldStyle italicStyle, fontSizeStyle;txtArea.setFontfont;;windowStyle.addItemListenernew ItemListener Overridepublic void itemStateChangedItemEvent e // 改变窗口String s String e.getItem;String className ;if s.equalsWindows显示效果className com.sun.java.swing.plaf.windows.WindowsLookAndFeel;else if s.equalsUnix显示效果className com.sun.java.swing.plaf.motif.MotifLookAndFeel;else if s.equals默认显示效果className UIManager.getCrossPlatLookAndFeelClassName;try UIManager.setLookAndFeelclassName;SwingUtilities.updateComponentTreeUIartFont; catch Exception de System.out.printlnException happened;;panel.addfontType;panel.addfontSize;panel.addwindowStyle;return panel;public static void mainString args artFont new ArtFont;artFont.setDefaultCloseOperationJFrame.EXIT_ON_CLOSE;2. 日历应用程序设计在实验三第2题的基础上,添加事件处理机制,并逐步完善程序功能。分别用CalendarFrame类的对象做监视器和匿名内部类的对象做监视器实现。要求实现如下功能l 在文本框Year中输入年份,验证年份的有效性;按回车键后,显示输入年份的正确日历l 单击previousMonth按钮可以显示当前月的上一月的日历;如果月份小于1,则显示上一年的12月l 单击nextMonth按钮,可以显示当前月的下一月的日历;如果月份大于1,则显示下一年的1月CalendarBean.javapackage Sy;import java.util.Calendar;public class CalendarBean String day;int year 2013, month 0;public void setYearint year this.year year;public int getYear return year;public void setMonthint month this.month month;public int getMonth return month;//返回某年某月1号开始的日期数组public String getCalendar String a new String42;Calendar 日历 Calendar.getInstance;//注意1月份是从0开始,所以要减1日历.setyear, month - 1, 1;int 星期几 日历.getCalendar.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 else day 28;for int i 星期几, n 1; i 星期几 day; i ai String.valueOfn;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;Button titleName new Button7;Button nextMonth, previousMonth;Label showMessage;TextField Year;CalendarBean calendar;String name 日, 一, 二, 三, 四, 五, 六 ;int year 2013, month 1;String days;public CalendarFrame calendar new CalendarBean;calendar.setYearyear;calendar.setMonthmonth;days calendar.getCalendar;ScrollPane scrollPane new ScrollPane;scrollPane.addgetCenterPanel;addscrollPane, BorderLayout.CENTER;// 窗口添加scrollPane在中心区域addgetNorthPanel, BorderLayout.NORTH;// 窗口添加pNorth 在北面区域addgetSouthPanel, BorderLayout.SOUTH;// 窗口添加pSouth 在南区域。private Panel getNorthPanel Panel panel new Panel;labelYear new Label请输入年份;Year new TextField10;previousMonth new Button上月;nextMonth new Button下月;Year.addActionListenernew ActionListener public void actionPeredActionEvent e // 文本输入try year Integer.parseIntYear.getText; catch NumberatException e1 JOptionPane.showMessageDialognull, 您输入的年份有误,请重新输入;Year.setFocusabletrue;calendar.setYearyear;calendar.setMonthmonth;days calendar.getCalendar;for int i 0; i 42; i labelDayi.setTextdaysi;showMessage.setText日历 calendar.getYear 年 calendar.getMonth 月;;previousMonth.addActionListenernew ActionListener public void actionPeredActionEvent e //上月按钮month--;ifmonth 1year--;month1;calendar.setYearyear;calendar.setMonthmonth;days calendar.getCalendar;for int i 0; i 42; i labelDayi.setTextdaysi;showMessage.setText日历 calendar.getYear 年 calendar.getMonth 月;;nextMonth.addActionListenernew ActionListener public void actionPeredActionEvent e // 下月按钮month;ifmonth 12year;month1;calendar.setYearyear;calendar.setMonthmonth;days calendar.getCalendar;for int i 0; i 42; i labelDayi.setTextdaysi;showMessage.setText日历 calendar.getYear 年 calendar.getMonth 月;;panel.addlabelYear;panel.addYear;panel.addpreviousMonth;panel.addnextMonth;return panel;private Panel getCenterPanel Panel panel new Panel;panel.setLayoutnew GridLayout7, 7;// 将panel的布局设置为7行7列的GridLayout布局for int i 0; i 7; i titleNamei new Buttonnamei;panel.addtitleNamei;// panel添加组件titleNamei。for int i 0; i 42; i labelDayi new Label, Label.CENTER;panel.addlabelDayi;// panel添加组件labelDayi。for int i 0; i 42; i labelDayi.setTextdaysi;return panel;private Panel getSouthPanel Panel panel new Panel;showMessage new Label;showMessage.setText日历 calendar.getYear 年 calendar.getMonth 月;panel.addshowMessage;return panel;CalendarMainClass.javapackage Sy;import java.awt.event.*;public class CalendarMainClass public static void mainString args CalendarFrame frame new CalendarFrame;frame.setTitle日历应用程序;frame.setBounds100, 100, 360, 300;frame.setVisibletrue;frame.validate;frame.addWindowListenernew WindowAdapter public void windowClosingWindowEvent e System.exit0; ; 总结体会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值