Java语言程序设计基础篇_编程练习题**16.14(选择一种字体)

题目:**16.14(选择一种字体)

编写一个程序,可以动态地改变堆栈面板上显示的标签中文本的字体。这个消息可以同时以粗体和斜体显示。可以从组合框中选择字体名和字体大小,如图16-42a所示。使用Font.getFamilies() 可以得到可用的字体名。字体大小的组合框初始化为从1到100之间的数字。

  • 习题思路
  1. 新建一个String数组size表示组合框中的字体大小,设置为1~100
  2. 创建一个HBox,创建两个Label和两个组合框ComboBox,第一个组合框内容设置为Font.getFamilies(),第二个组合框内容设置为①中定义的size,两个组合框都要选择一个默认的值作为初始值
  3. 创建第二个HBox,新建一个Text文本,Font设置成组合框内的默认值
  4. 创建第三个HBox,创建两个CheckBox复选框,Bold和Italic
  5. 创建一个BorderPane,将②③④中的HBox分别设置在顶部、中心、底部
  6. 首先为两个组合框注册事件,当事件被触发时将字体设置为组合框中的值
  7. 创建一个EventHandler,为两个CheckBox复选框的勾选情况分别对Text设置对应的字体
  8. 复选框的行为设置为⑦中的EventHandler
  9. 创建舞台并运行代码
代码示例

编程练习题16_14ChooseAFont.java

java 复制代码
package chapter_16;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class 编程练习题16_14ChooseAFont extends Application{
	@Override
	public void start(Stage primaryStage) throws Exception {
		String[] size = new String[100];
		for(int i = 1;i <= 100;i++) {
			size[i-1] = i+"";
		}
		
		HBox hBoxTop = new HBox();
		ComboBox<String> cboFont = new ComboBox<>();
		cboFont.getItems().addAll(Font.getFamilies());
		Label lbFont = new Label("Font Name",cboFont);
		lbFont.setContentDisplay(ContentDisplay.RIGHT);
		cboFont.setValue("华文细黑");
		
		ComboBox<String> cboSize = new ComboBox<>();
		cboSize.getItems().addAll(size);
		Label lbSize = new Label("Font Size",cboSize);
		lbSize.setContentDisplay(ContentDisplay.RIGHT);
		cboSize.setValue("26");
		
		hBoxTop.getChildren().addAll(cboFont,lbFont, cboSize,lbSize);
		
		HBox hBoxCenter = new HBox();
		hBoxCenter.setAlignment(Pos.CENTER);
		Text text = new Text("Programming is fun");
		hBoxCenter.getChildren().add(text);
		text.setFont(new Font("华文细黑", 26));
		
		HBox hBoxBottom = new HBox();
		hBoxBottom.setAlignment(Pos.CENTER);
		CheckBox chkBold = new CheckBox("Bold");
		CheckBox chkItalic = new CheckBox("Italic");
		hBoxBottom.getChildren().addAll(chkBold, chkItalic);
		
		BorderPane borderPane = new BorderPane();
		borderPane.setTop(hBoxTop);
		borderPane.setCenter(hBoxCenter);
		borderPane.setBottom(hBoxBottom);
		
		cboFont.setOnAction(e ->{
			Font font = new Font(cboFont.getValue(),Integer.valueOf(cboSize.getValue()));
			text.setFont(font);
			chkBold.setSelected(false);
			chkItalic.setSelected(false);
		});
		cboSize.setOnAction(e ->{
			Font font = new Font(cboFont.getValue(),Integer.valueOf(cboSize.getValue()));
			text.setFont(font);
		});
		
		
		EventHandler<ActionEvent> handler = e->{
			if(chkBold.isSelected() && chkItalic.isSelected()) {
				Font font = Font.font(cboFont.getValue(),FontWeight.BOLD, FontPosture.ITALIC,Integer.valueOf(cboSize.getValue()));
				text.setFont(font);
			}
			else if (chkBold.isSelected()) {
				Font font = Font.font(cboFont.getValue(),FontWeight.BOLD, FontPosture.REGULAR,Integer.valueOf(cboSize.getValue()));
				text.setFont(font);
			}else if(chkItalic.isSelected()) {
				Font font = Font.font(cboFont.getValue(),FontWeight.NORMAL, FontPosture.ITALIC,Integer.valueOf(cboSize.getValue()));
				text.setFont(font);
			}else {
				Font font = Font.font(cboFont.getValue(),FontWeight.NORMAL, FontPosture.REGULAR,Integer.valueOf(cboSize.getValue()));
				text.setFont(font);
			}
		};
		chkBold.setOnAction(handler);
		chkItalic.setOnAction(handler);
		
		Scene scene = new Scene(borderPane,500, 200);
		primaryStage.setTitle("编程练习题16_14ChooseAFont");
		primaryStage.setScene(scene);
		primaryStage.show();
	}
	public static void main(String[] args) {
		Application.launch(args);
	}
}
结果展示
相关推荐
今天只学一颗糖16 分钟前
Linux学习笔记--查询_唤醒方式读取输入数据
笔记·学习
哈基米喜欢哈哈哈36 分钟前
低版本的JVM遇到高版本的class字节码是否会报错
java·jvm
2351640 分钟前
【并发编程】详解volatile
java·开发语言·jvm·分布式·后端·并发编程·原理
GIS学姐嘉欣40 分钟前
【智慧城市】2025年中国地质大学(武汉)暑期实训优秀作品(5):智慧矿产
学习·gis·智慧城市·webgis
折翼的恶魔1 小时前
前端学习之样式设计
前端·css·学习
IT_陈寒1 小时前
JavaScript性能优化:3个被低估的V8引擎技巧让你的代码提速50%
前端·人工智能·后端
洛小豆1 小时前
java 中 char 类型变量能不能储存一个中文的汉字,为什么?
java·后端·面试
云飞云共享云桌面1 小时前
SolidWorks服务器多人使用方案
大数据·运维·服务器·前端·网络·电脑·制造
爱吃烤鸡翅的酸菜鱼1 小时前
从数据库直连到缓存预热:城市列表查询的性能优化全流程
java·数据库·后端·spring·个人开发
Algebraaaaa1 小时前
Qt中的字符串宏 | 编译期检查和运行期检查 | Qt信号与槽connect写法
开发语言·c++·qt