实验四 Java图形界面与事件处理

实验四****Java 图形界面与事件处理

**###**实验目的

  1. 掌握Java语言中AWT和Swing组件的基本用法
  2. 掌握Java语言中的事件处理方法
  3. 掌握Java语言中事件源、监视器和处理事件的接口的概念

**###**实验内容

  1. 图形用户界面设计程序(ArtFont.java)(90分)

要求:设计一个文字字体设置窗体,在该窗体中可以设置要显示文字的字体内容,包括字体名称、字体大小、粗体和斜体等字体风格。并模拟在不同操作系统下的显示效果。添加事件处理机制,要求实现如下功能:

  1. 当在文本框中输入文字后回车,在文本域中显示输入的文字。
  2. 当分别选择粗体和斜体复选框时,文本域中的文字分别显示粗体和斜体样式。
  3. 当点击颜色按钮时,出现颜色选择对话框,选择需要的颜色,按确定按钮后,按钮的前景色和文本域的前景色设置为选定的颜色。
  4. 当选择字体样式下拉框中的某一字体样式时,文本域中的文字设置为指定的字体样式。
  5. 当选择字体大小下拉框中的某一字体大小时,文本域中的文字设置为指定的字体大小。
  6. 当选择窗体样式下拉框中的某一窗体效果时,窗体外观改变为指定的窗体外观。

程序的最终显示效果如图4-3所示:

图4-3 程序运行效果

提示:整个窗体继承于JFrame,采用BorderLayout布局。可以在窗体中添加三个面板,分别位于窗体的北部、中部和南部,然后分别在各个面板中添加其它组件,并逐步完善程序功能。

###实验代码

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;

public class ArtFont extends JFrame implements ActionListener, ItemListener {

JComboBox fontType;//字体样式下拉框

JComboBox fontSize;//字体大小下拉框

JComboBox windowStyle;//窗体样式下拉框

JCheckBox boldBx;// 粗体按钮

JCheckBox italicBx;// 斜体按钮

JButton colorBtn;// 颜色按钮;

String[] fontNames;// 字体名称;

String[] fontSizes;// 字体大小;

JLabel label;// 输入提示标签;

JTextField inputText;// 文字输入框;

JTextArea txtArea;// 文字显示区;

JPanel northPanel;// 字体设置;

JPanel centerPanel;// 显示效果区

JPanel southPanel;//样式设置

Font font;

int boldStyle, italicStyle, underlineStyle;

int fontSizeStyle;

String fontNameStyle;

Color colorStyle = Color.black;// 设置字体的默认颜色为黑色;

String[] style = { "默认显示效果", "Windows显示效果", "Unix显示效果" };

public ArtFont() {

super("字体设置");

// 设置默认字体

boldStyle = 0;

italicStyle = 0;

underlineStyle = 0;

fontSizeStyle = 10;

fontNameStyle = "宋体";

font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);

northPanel = getNorthPanel();

centerPanel = getCenterPanel();

southPanel = getSouthPanel();

// 设置容器;

Container container = getContentPane();

container.setLayout(new BorderLayout());

//将northPanel添加到窗体的北部

container.add(northPanel, BorderLayout.NORTH);

//将centerPanel添加到窗体的中部

container.add(centerPanel, BorderLayout.CENTER);

//将southPanel添加到窗体的南部

container.add(southPanel, BorderLayout.SOUTH);

setSize(500, 300);

//将窗体位于屏幕的中央

this.setLocationRelativeTo(null);

setVisible(true);

}

private JPanel getNorthPanel() {

JPanel panel = new JPanel();

label = new JLabel("输入");

inputText = new JTextField(10);

boldBx = new JCheckBox("粗体");

italicBx = new JCheckBox("斜体");

colorBtn = new JButton("颜色");

panel.add(label);

panel.add(inputText);

panel.add(boldBx);

panel.add(italicBx);

panel.add(colorBtn);

JTextArea textArea= new JTextArea("k软件221 2022900615 胡天文");

//注册事件监视器

inputText.addActionListener(this);

colorBtn.addActionListener(this);

boldBx.addItemListener(this);

italicBx.addItemListener(this);

panel.add(textArea);

return panel;

}

private JPanel getCenterPanel() {

JPanel panel = new JPanel();

txtArea = new JTextArea();

panel.setLayout(new BorderLayout());

panel.add(new JScrollPane(txtArea), BorderLayout.CENTER);

return panel;

}

private JPanel getSouthPanel() {

JPanel panel = new JPanel();

//获得系统默认字体

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();

fontNames = ge.getAvailableFontFamilyNames();

fontType = new JComboBox(fontNames);

//设置字体大小

fontSizes = new String[63];

for (int i = 0; i < fontSizes.length; i++) {

fontSizes[i] = Integer.toString(i+10);

}

fontSize = new JComboBox(fontSizes);

windowStyle = new JComboBox(style);

panel.add(fontType);

panel.add(fontSize);

panel.add(windowStyle);

//注册事件监视器

fontType.addItemListener(this);

fontSize.addItemListener(this);

windowStyle.addItemListener(this);

return panel;

}

public static void main(String args[]) {

ArtFont artFont = new ArtFont();

artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

@Override

public void actionPerformed(ActionEvent e) {

if (e.getSource() == inputText) {

txtArea.setText(inputText.getText());

} else if (e.getSource() == colorBtn) {

colorStyle=JColorChooser.showDialog(this,"请选择一种颜色",colorStyle);

colorBtn.setForeground(colorStyle);

txtArea.setForeground(colorStyle);

}

}

@Override

public void itemStateChanged(ItemEvent e) {

if (e.getSource() == boldBx) {

if (boldBx.isSelected()){

boldStyle=Font.BOLD;

}else {

boldStyle=Font.PLAIN;

}

} else if (e.getSource() == italicBx) {

if (italicBx.isSelected()){

italicStyle=Font.ITALIC;

}else {

italicStyle=Font.PLAIN;

}

} else if (e.getSource() == fontType) {

fontNameStyle=(String) e.getItem();

} else if (e.getSource() == fontSize) {

fontSizeStyle=Integer.parseInt((String) e.getItem());

} else if (e.getSource() == windowStyle) {

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.plaf.motif.MotifLookAndFeel";

else if (s.equals("默认显示效果"))

className = UIManager.getCrossPlatformLookAndFeelClassName();

try {

UIManager.setLookAndFeel(className);

SwingUtilities.updateComponentTreeUI(this);

} catch (Exception de) {

System.out.println("Exception happened!");

}

}

font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);

txtArea.setFont(font);

}

}

**###**实验总结

在本次实验中,我学习了Java图形界面的基本概念和使用方法,以及事件处理的基本原理和实现方式。通过实验,我掌握了以下几个方面的知识和技能:

Java图形界面:我学会了使用Java的Swing库来创建图形界面,其中包括了常用的组件(如按钮、文本框、标签等)和布局管理器(如流式布局、边界布局等)。我了解了每个组件的基本用法和属性设置,以及布局管理器的使用方法和特点。

事件处理:我学习了Java事件模型的基本原理和实现方式。具体来说,我学会了使用监听器来监听和处理特定的事件,例如按钮点击、鼠标移动等。我了解了事件监听器接口的基本方法和实现方式,以及如何将监听器与组件关联起来。

事件处理的实现方式:我学会了两种常用的事件处理方式,即继承监听器接口和匿名内部类。通过继承监听器接口,我可以在自定义的监听器类中实现事件处理方法。而通过匿名内部类,我可以在组件的创建过程中直接实现事件处理方法,简化了代码的编写和维护。

通过本次实验,我发现Java图形界面和事件处理的学习对于日常的Java程序开发非常重要。图形界面可以为用户提供友好的交互界面,而事件处理则可以响应用户的操作并执行相应的逻辑。

相关推荐
李长渊哦1 小时前
深入理解 JavaScript 中的全局对象与 JSON 序列化
开发语言·javascript·json
若水晴空初如梦2 小时前
QT聊天项目DAY06
开发语言·qt
_一条咸鱼_3 小时前
Python 数据类型之可变与不可变类型详解(十)
人工智能·python·面试
_一条咸鱼_3 小时前
Python 入门之基本运算符(六)
python·深度学习·面试
h汉堡3 小时前
C++入门基础
开发语言·c++·学习
_一条咸鱼_3 小时前
Python 流程控制之 for 循环(九)
人工智能·python·面试
_一条咸鱼_3 小时前
Python 语法入门之流程控制 if 判断(七)
人工智能·python·面试
Senar3 小时前
如何判断浏览器是否开启硬件加速
前端·javascript·数据可视化
_一条咸鱼_3 小时前
Python 流程控制之 while 循环(八)
人工智能·python·面试