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);
	}
}
结果展示
相关推荐
贩卖纯净水.2 分钟前
Chrome调试工具(查看CSS属性)
前端·chrome
爱吃喵的鲤鱼5 分钟前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
LuckyLay10 分钟前
Spring学习笔记_27——@EnableLoadTimeWeaving
java·spring boot·spring
向阳121823 分钟前
Dubbo负载均衡
java·运维·负载均衡·dubbo
懒惰才能让科技进步27 分钟前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
DARLING Zero two♡31 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
Gu Gu Study33 分钟前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
love_and_hope42 分钟前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
Chef_Chen1 小时前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
栈老师不回家1 小时前
Vue 计算属性和监听器
前端·javascript·vue.js