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

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);
	}
}
  • 结果展示 

 

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值