Java语言程序设计基础篇_编程练习题**16.27(显示国旗和国旗描述)

目录

题目:**16.27(显示国旗和国旗描述)

习题思路

代码示例 

 结果展示


题目:**16.27(显示国旗和国旗描述)

  程序清单16-8中给出了一个程序,让用户可以从一个组合框中选择国家,从而查看一个国家的国旗以及描述。其中描述是一个写在程序中的字符串。重写这个程序,从文件中来读取文本描述,假设这些描述保存在text目录下的文件description0.txt,...,description8.txt中,按照顺序分别表示9个国家:加拿大、中国、丹麦、法国、印度、挪威、英国和美国。

  • 习题思路
  1.  把程序清单16-8代码中的String[]改为File[]
  2. 创建一个获取字符串的方法(假设名字为getString()),获取传入的file参数,逐行读取文件中的文本,存入一个字符串中,最后返回字符串。
  3.  在16-8的setDisplay()方法中设置文本域中的文本时,在file[index]后面添加.getString()即可。
  • 代码示例 

编程练习题16_27ShowNationalFlagDescription.java

package chapter_16;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class 编程练习题16_27ShowNationalFlagDescription extends Application{
	private String[] flagTitles = {"Canada", "China", "Denmark",
			"France","Germany", "India", "Norway","United_Kingdom",
			"United_States_of_America"
	};
	
	private ImageView[] flagImage = {
			new ImageView("src/image/Canada.png"),
			new ImageView("src/image/China.png"),
			new ImageView("src/image/Denmark.png"),
			new ImageView("src/image/France.png"),
			new ImageView("src/image/Germany.png"),
			new ImageView("src/image/India.png"),
			new ImageView("src/image/Norway.png"),
			new ImageView("src/image/United_Kingdom.png"),
			new ImageView("src/image/United_States_of_America.png")
	};
	
	private File[] flagDescrition = new File[9];
	private 程序清单16_6DescriptionPane descriptionPane = new 程序清单16_6DescriptionPane();
	private ComboBox<String> cbo = new ComboBox<>();
	
	@Override
	public void start(Stage primaryStage) throws Exception {
		for(int i = 0;i <= 8;i ++) {
			flagDescrition[i] = new File("src/Text/description"+i+".txt");
		}
		setDisplay(0);
		
		BorderPane pane = new BorderPane();
		BorderPane paneForComboBox = new BorderPane();
		paneForComboBox.setLeft(new Label("Select a country:"));
		paneForComboBox.setCenter(cbo);
		pane.setTop(paneForComboBox);
		cbo.prefWidth(400);
		cbo.setValue("Canada");
		
		ObservableList<String> items = FXCollections.observableArrayList(flagTitles);
		cbo.getItems().addAll(items);
		pane.setCenter(descriptionPane);
		
		cbo.setOnAction(e -> setDisplay(items.indexOf(cbo.getValue())));
		
		Scene scene = new Scene(pane, 450, 170);
		primaryStage.setTitle("编程练习题16_27ShowNationalFlagDescription");
		primaryStage.setScene(scene);
		primaryStage.show();
	}
	private void setDisplay(int index) {
		descriptionPane.setTitle(flagTitles[index]);
		descriptionPane.setImageView(flagImage[index]);
		descriptionPane.setDescription(getString(flagDescrition[index]));
	}
	public static void main(String[] args) {
		Application.launch(args);
	}
	public String getString(File file) {
		String str = "";
		try {
		Scanner scanner = new Scanner(file);
		while(scanner.hasNextLine()) {
			String line = scanner.nextLine();
			str += line;
		}
		scanner.close();
		}	
		catch (FileNotFoundException e) {
			System.out.println(e);
		}
		
		return str;
	}
}
  •  结果展示

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值