Java实验四

news2025/7/26 22:13:01

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

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

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

图4-3 程序运行效果

package demo01;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class ArtFont extends JFrame implements 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;// 样式设置
	Container container;
	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.PAGE_START);
		// 将centerPanel添加到窗体的中部
		container.add(centerPanel, BorderLayout.CENTER);
		// 将southPanel添加到窗体的南部
		container.add(southPanel, BorderLayout.PAGE_END);
		setSize(500, 300);
		// 将窗体位于屏幕的中央
		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);
		ActionListener listener = new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (e.getSource() == inputText) {
					txtArea.setText(inputText.getText());
				} 
				else if (e.getSource() == colorBtn) {
					colorStyle = JColorChooser.showDialog(panel,"请选择一种颜色", colorStyle);
					colorBtn.setForeground(colorStyle);
					txtArea.setForeground(colorStyle);
				} 
			}
		};
		ActionListener listener2 = new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				boldStyle = 0;
				if (boldBx.isSelected()) {
					boldStyle += Font.BOLD;
					
				} 
				else if (italicBx.isSelected()) {
					boldStyle += Font.ITALIC;
				} 
				Font font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);
				txtArea.setFont(font);
			}
		};
		inputText.addActionListener(listener);
		boldBx.addActionListener(listener2);
		italicBx.addActionListener(listener2);
		colorBtn.addActionListener(listener);
		return panel;
	}

	private JPanel getCenterPanel() {
		JPanel panel = new JPanel();
		txtArea = new JTextArea(10, 10);
		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<String>(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 itemStateChanged(ItemEvent e) {
		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);

	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1156823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++学习初探---‘C++面向对象‘-继承函数重载与运算符重载

文章目录 前言继承继承是什么&#xff1f;三种访问权限的继承&#xff1a; 函数重载与运算符重载函数重载运算符重载可重载运算符&不可重载运算符 前言 第三次学习记录&#xff0c;依旧是C面向对象的内容。 继承 继承是什么&#xff1f; C中的继承是一种面向对象编程&am…

Spring5学习笔记汇总

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Spring专栏 ✨特色专栏&#xff1a; M…

[AUTOSAR][诊断管理][ECU][$2F] 通过ID控制IO

文章目录 一、简介服务功能功能描述应用场景服务请求请求格式控制参数(IOCP)请求实例服务响应响应格式正响应实例负响应NRC支持二、 示例代码2f_io_ctl_by_id.c一、简介 2F诊断服务主要在车身域比较常见,比如车窗控制,传感器开关、执行器控制等。 UDS诊断服务协议都以ISO标准…

VM Ware在桥接模式下无法联网

目录 一&#xff0c;说明二&#xff0c;桥接模式下选择对应网卡三&#xff0c;物理机设置静态IP四&#xff0c;虚拟机设置静态IP四&#xff0c;测试 一&#xff0c;说明 VM Ware是一款常用的虚拟软件&#xff0c;我们可以在Windows系统上安装该软件&#xff0c;加载相应的镜像…

【T3】彻底关闭服宝

【问题描述】 畅捷通T3登录后&#xff0c; 右下角会出现服宝窗口&#xff0c;需要手工退出。 但是每次重新登录账套后都会出现&#xff0c;非常烦&#xff1b;并且界面空白。 【解决方法】 在软件的安装目录下\UFSMART\Portal&#xff0c;找到【url.ini】文件。 用记事本打开…

如何用ChatGPT加速生成一份有图有文的简报ppt,实战案例教学

今天小编给大家提供一个小技巧&#xff0c;让大家在让chatgpt帮你写ppt的时候自动把图也配上。 这个prompts经过小编反复调试&#xff0c;达到了一个较好的效果&#xff0c;就是下面这条&#xff0c;大家可以复制发送到我们AI写稿专家公众号里进行生成&#xff1a; 以「个人知…

Unity 粒子特效-第四集-光球闪烁特效

一、特效预览 二、制作原理 光球素材资源 链接&#xff1a;https://pan.baidu.com/s/1XzWpQU2zX_wupMXSW7RxwA?pwdvu5r 提取码&#xff1a;vu5r 1.素材介绍 仔细看&#xff0c;我们的粒子贴图是&#xff08;如下&#xff09;&#xff0c;一颗球球 2.步骤介绍 1.光球动画的…

PyCharm下载和安装教程(包含配置Python解释器)

PyCharm 是 JetBrains 公司&#xff08;www.jetbrains.com&#xff09;研发&#xff0c;用于开发 Python 的 IDE 开发工具。图 1 所示为 JetBrains 公司开发的多款开发工具&#xff0c;其中很多工具都好评如潮&#xff0c;这些工具可以编写 Python、C/C、C#、DSL、Go、Groovy、…

服务器遭受攻击如何处理(记录排查)

本文的重点是介绍如何鉴别安全事件以及保护现场的方法&#xff0c;以确保服务器负责人能够在第一时间对安全攻击做出反应&#xff0c;并在最短时间内抵御攻击或减少攻击所带来的影响。 在服务器遭遇疑似安全事件时&#xff0c;通常可以从账号、进程、网络和日志四个主要方面进…

学习MySQL数据库之前非看不可的一篇文章

目录 1、数据库概念1.1主流数据库 3、基本使用2.1 连接服务器2.2 服务器、数据库、表关系2.3 见见猪跑 3、MySQL架构4、SQL分类 1、数据库概念 数据库&#xff08;Database&#xff09;是一个有组织的数据集合&#xff0c;用于存储、管理和检索信息。它是一个计算机系统中的关键…

【错误解决方案】ModuleNotFoundError: No module named ‘zarr‘

1. 错误提示 在python程序&#xff0c;尝试导入一个名为zarr的模块&#xff0c;但Python提示找不到这个模块。 错误提示&#xff1a;ModuleNotFoundError: No module named ‘zarr‘ 2. 解决方案 这可能是因为你尚未安装这个模块或者安装过程中出现了问题。 zarr是一个用于存…

Elasticsearch:从头开始解释带有 Transformer 的生成式 AI 架构

作者&#xff1a;ARIS PAPADOPOULOS 这篇长篇文章解释了生成式人工智能的工作原理&#xff0c;从基础一直到注重直觉的生成式 transformer 架构。 这篇长篇文章解释了生成式人工智能的工作原理&#xff0c;从基础一直到生成式 transformer 架构。 重点是直觉&#xff0c;而不是…

阿里发布AI编码助手:通义灵码,兼容 VS Code、IDEA等主流编程工具

今天是阿里云栖大会的第一天&#xff0c;相信场外的瓜&#xff0c;大家都吃过了。这里就不说了&#xff0c;有兴趣可以看看这里&#xff1a;云栖大会变成相亲现场&#xff0c;最新招婿鄙视链来了... 。 这里主要说说阿里还发布了一款AI编码助手&#xff0c;对于我们开发者来说…

写时复制技术

写时复制&#xff08;Copy-On-Write&#xff0c;COW&#xff09;是一种计算机科学中常见的技术&#xff0c;用于在对共享资源进行写操作时&#xff0c;确保并发环境下的数据一致性。 1. 原理 初始共享状态&#xff1a;在共享资源被多个进程或线程共享时&#xff0c;初始时它们…

【串,BF算法】

文章目录 串&#xff08;String&#xff09;---- 零个或多个任意字符组成的有限序列串的定义----几个术语 串的类型定义&#xff0c;存储结构及运算串的顺序串结构串的链式串结构串的链式结构串的模式匹配算法----BF算法 串&#xff08;String&#xff09;---- 零个或多个任意字…

蓝桥杯刷题

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; &#x1f449;&#x1f3fb;最大降雨量 原题链接&#xff1…

【设计模式】第24节:行为型模式之“模板方法模式”

一、简介 模板方法模式在一个方法中定义一个算法骨架&#xff0c;并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下&#xff0c;重新定义算法中的某些步骤。 模板模式有两大作用&#xff1a;复用和扩展。其中&#xff0c;复用指的是&#…

星环科技Sophon 3.2发布,通过“六易三仓两中心”实现新一代AI平民化

针对目前各行业用户在落地广泛业务需求分析、处理多重数据模态对接、跟进高度定制场景问题解决、运营多源多框架AI模型等方面的问题&#xff0c;星环科技自主研发的一站式智能分析工具平台Sophon在近日的向星力•未来数据技术峰会上推出了3.2版本。 3.2版本的Sophon通过以数据…

硬件测试(二):波形质量

一、信号质量测试 信号在传输的过程中&#xff0c;一般不是标准的矩形波信号&#xff0c;信号质量测试即通过示波器测试单板硬件的数字信号和模拟信号的各项指标&#xff0c;包括电源、时钟、复位、CPU小系统、外部接口&#xff08;USB、网口、串口&#xff09;、逻辑芯片(CPLD…

数据库-用户权限管理

创建用户&#xff1a; create user testlocalhost identified by 123456; create user 创建用户的固定开头 testlocalhost test为用户名&#xff0c; localhost:新建用户可以在哪些主机上登录&#xff0c;即使可以使用IP地址&#xff0c;网段主机名都可以 identified by 1…