1、实验五 Java事件处理实验五 Java事件处理实验目的1掌握Java语言中的事件处理方法2掌握Java语言中事件源、监视器和处理事件的接口的概念实验内容1.图形用户界面设计程序(ArtFont.java)在实验三第1题的基础上,添加事件处理机制,并逐步完善程序功能。分别用ArtFont类的对象做监视器和匿名内部类的对象做监视器实现。要求实现如下功能: 当在文本框中输入文字后回车,在文本域中显示输入的文字。 当分别选择粗体和斜体复选框时,文本域中的文字分别显示粗体和斜体样式。 当点击颜色按钮时,出现颜色选择对话框,选择需要的颜色,按确定按钮后,按钮的前景色和文本域的前景色设置为选定的颜色。 当
2、选择字体样式下拉框中的某一字体样式时,文本域中的文字设置为指定的字体样式。 当选择字体大小下拉框中的某一字体大小时,文本域中的文字设置为指定的字体大小。 当选择窗体样式下拉框中的某一窗体效果时,窗体外观改变为指定的窗体外观。图1 程序界面运行效果package Sy;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class ArtFont extends JFrame static ArtFont artFont; JComboBox fontType;/字体样式下拉框 JComboBox fontS
3、ize;/字体大小下拉框 JComboBox windowStyle;/窗体样式下拉框 JCheckBox boldBx;/ 粗体按钮 JCheckBox italicBx;/ 斜体按钮 JButton colorBtn;/ 颜色按钮 String fontNames;/ 字体名称 String fontSizes;/ 字体大小 JLabel label;/ 输入提示标签 JTextField inputText;/ 文字输入框 JTextArea txtArea;/ 文字显示区 JPanel northPanel;/ 字体设置 JPanel centerPanel;/ 显示效果区 JPane
4、l 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 = 宋
5、体; font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle); northPanel = getNorthPanel(); centerPanel = getCenterPanel(); southPanel = getSouthPanel(); / 设置容器 Container container = getContentPane(); container.setLayout(new BorderLayout(); add(northPanel , BorderLayout.NORTH);/将northPa
6、nel添加到窗体的北部 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 JLabel(输入); inputTex
7、t = new JTextField(10); boldBx = new JCheckBox(粗体); italicBx = new JCheckBox(斜体); colorBtn = new JButton(颜色); inputText.addActionListener(new ActionListener() Override public void actionPerformed(ActionEvent e) / 文本输入 txtArea.setText(inputText.getText(); ); boldBx.addItemListener(new ItemListener()
8、Override public void itemStateChanged(ItemEvent e) / 加粗 if(e.getStateChange() = ItemEvent.SELECTED) boldStyle = 1; else boldStyle = 0; font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle); txtArea.setFont(font); ); italicBx.addItemListener(new ItemListener() Override public void it
9、emStateChanged(ItemEvent e) / 斜体 if(e.getStateChange() = ItemEvent.SELECTED) italicStyle = 1; else italicStyle = 0; font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle); txtArea.setFont(font); ); colorBtn.addActionListener(new ActionListener() Override public void actionPerformed(A
10、ctionEvent e) / 改变颜色 colorStyle = JColorChooser.showDialog(null, 请选择一种颜色, colorStyle); colorBtn.setForeground(colorStyle); txtArea.setForeground(colorStyle); font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle); txtArea.setFont(font); ); panel.add(label); panel.add(inputText); pane
11、l.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; private JPanel getSouthPanel() J
12、Panel 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+) fontSizesi = Integer.toString
13、(i+10); fontSize = new JComboBox(fontSizes); windowStyle = new JComboBox(style); fontType.addItemListener(new ItemListener() Override public void itemStateChanged(ItemEvent e) / 字体的类型 fontNameStyle = (String) e.getItem(); font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle); txtAre
14、a.setFont(font); ); fontSize.addItemListener(new ItemListener() Override public void itemStateChanged(ItemEvent e) / 字体的大小 String s = (String) e.getItem(); fontSizeStyle = Integer.parseInt(s); font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle); txtArea.setFont(font); ); windowSty
15、le.addItemListener(new ItemListener() Override public 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.equals(Unix显示效果) className = com.sun.java.swing.p
16、laf.motif.MotifLookAndFeel; else if (s.equals(默认显示效果) className = UIManager.getCrossPlatformLookAndFeelClassName(); try UIManager.setLookAndFeel(className); SwingUtilities.updateComponentTreeUI(artFont); catch (Exception de) System.out.println(Exception happened!); ); panel.add(fontType); panel.add(
17、fontSize); panel.add(windowStyle); return panel; public static void main(String args) artFont = new ArtFont(); artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 2.日历应用程序设计在实验三第2题的基础上,添加事件处理机制,并逐步完善程序功能。分别用CalendarFrame类的对象做监视器和匿名内部类的对象做监视器实现。要求实现如下功能: 在文本框inputYear中输入年份,验证年份的有效性;按回车键后,显示输入年份的正
18、确日历 单击previousMonth按钮可以显示当前月的上一月的日历;如果月份小于1,则显示上一年的12月 单击nextMonth按钮,可以显示当前月的下一月的日历;如果月份大于1,则显示下一年的1月CalendarBean.javapackage Sy;import java.util.Calendar;public class CalendarBean String day; int year = 2013, month = 0; public void setYear(int year) this.year = year; public int getYear() return yea
19、r; 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(year, month - 1, 1); int 星期几 = 日历.get(Calendar.DAY_OF_WEEK) - 1; int day =
20、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) | (year % 400 = 0) day = 29; else day = 28; for (int i = 星期几, n = 1; i 星期几 + day; i
21、+) 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; Button titleName = new Button7; Button nextMonth, previousMonth; Label showMess
22、age; TextField inputYear; CalendarBean calendar; String name = 日, 一, 二, 三, 四, 五, 六 ; int year = 2013, month = 1; String days; public CalendarFrame() calendar = new CalendarBean(); calendar.setYear(year); calendar.setMonth(month); days = calendar.getCalendar(); ScrollPane scrollPane = new ScrollPane(
23、); scrollPane.add(getCenterPanel(); add(scrollPane, BorderLayout.CENTER);/ 窗口添加scrollPane在中心区域 add(getNorthPanel(), BorderLayout.NORTH);/ 窗口添加pNorth 在北面区域 add(getSouthPanel(), BorderLayout.SOUTH);/ 窗口添加pSouth 在南区域。 private Panel getNorthPanel() Panel panel = new Panel(); labelYear = new Label(请输入年份:
24、); inputYear = new TextField(10); previousMonth = new Button(上月); nextMonth = new Button(下月); inputYear.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) / 文本输入 try year = Integer.parseInt(inputYear.getText(); catch (NumberFormatException e1) JOptionPane.showMessageDi
25、alog(null, 您输入的年份有误,请重新输入!); inputYear.setFocusable(true); 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() + 月); ); previousMonth.addActionListe
26、ner(new ActionListener() public void actionPerformed(ActionEvent e) /上月按钮 month-; if(month 1) year-; month=1; calendar.setYear(year); calendar.setMonth(month); days = calendar.getCalendar(); for (int i = 0; i 12) year+; month=1; calendar.setYear(year); calendar.setMonth(month); days = calendar.getCa
27、lendar(); 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 GridLayout(7, 7); / 将panel的布局设置为7行7列的GridLayout布局 for
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1