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);
	}
}
结果展示
相关推荐
程序员张34 小时前
Maven编译和打包插件
java·spring boot·maven
ybq195133454315 小时前
Redis-主从复制-分布式系统
java·数据库·redis
weixin_472339465 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
小毛驴8506 小时前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
zwjapple6 小时前
docker-compose一键部署全栈项目。springboot后端,react前端
前端·spring boot·docker
枯萎穿心攻击6 小时前
响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法
开发语言·unity·c#·游戏引擎
DKPT6 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
Eiceblue7 小时前
【免费.NET方案】CSV到PDF与DataTable的快速转换
开发语言·pdf·c#·.net
好奇的菜鸟8 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
m0_555762908 小时前
Matlab 频谱分析 (Spectral Analysis)
开发语言·matlab