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);
	}
}
结果展示
相关推荐
两个人的幸福online36 分钟前
记录一次 用php 调用ai用stream返回
开发语言·php
漂流瓶6666661 小时前
Scala的模式匹配变量类型
开发语言·后端·scala
夏天吃哈密瓜1 小时前
Scala中的正则表达式01
大数据·开发语言·后端·正则表达式·scala
2401_833788051 小时前
Scala的模式匹配(2)
java·开发语言
Lbs_gemini06031 小时前
C++研发笔记14——C语言程序设计初阶学习笔记12
c语言·开发语言·c++·笔记·学习
MC何失眠2 小时前
vulnhub靶场【哈利波特】三部曲之Fawkes
网络·python·学习·网络安全
ac-er88882 小时前
GD库如何根据颜色生成纯色背景图
开发语言·php
web组态软件2 小时前
BY组态-低代码web可视化组件
前端·低代码
react_in2 小时前
webpack 题目
前端·webpack
MarisolHu2 小时前
前端学习笔记-Vue篇-02
前端·vue.js·笔记·学习