疯狂java讲义第七章补充习题第17题答案

17、使用Java国际化
先把前面Prosperties练习一下。这里会用到。ok了
用maven构建,把类分开,模块化的写。
国际化+打包jar包+界面(只需要一个frame和一个label就好了),双击运行查看结果,然后修改控制面板中的语言环境(需要升级电脑版本,改用输入参数的方式),再双击查看结果。
或者通过args输入参数构建Localel

maven传入命令行参数(这篇博客里:Maven:如何从命令行传递参数运行.java文件
在这里插入图片描述
要尝试使用Logger了,不然设置日志太麻烦了,要一个个注释掉。。。

结合下面的MessageFormat,练习,就是添加一个可以输入用户名的框框,和一个按钮,就显示你好,用户名。今天是星期几。然后做一个图标,根据使用的地区不同而更换旗帜。

在练习中使用Logger来设置日志,

使用日期国际化完善程序。

效果:
在这里插入图片描述

有Logger的简单运用

package internation;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.text.*;
import java.util.logging.*;
import java.io.*;
import static java.text.DateFormat.*;
public class Main 
{
	public static void main(String[] args) throws IOException
	{
		JFrame frame = new JFrame("国际化测试");
		
		JPanel panel1 = new JPanel();
		JLabel name = new JLabel("请输入你的姓名:");
		JTextField edit = new JTextField(30);
		panel1.add(name);
		panel1.add(edit);
		frame.add(panel1,BorderLayout.NORTH);

		JPanel panel2 = new JPanel();
		JLabel show = new JLabel("这里是展示部分");
		panel2.add(show);

		//使用java9新增的日志api
		System.Logger logger = System.getLogger("fkjava");
		Logger.getLogger("fkjava").setLevel(Level.FINE);
		Logger.getLogger("fkjava").addHandler(new FileHandler("a.xml"));

		//这里是业务逻辑
		//首先,根据命令行参数获取的国家/语言环境
		Locale myLocale = null;
		String nation = "";
		if(args.length!=0)
		{
			nation = args[0];
			//System.out.println("国家:"+nation);
			logger.log(System.Logger.Level.DEBUG,"国家:"+nation);
		}
		if(nation.equals("china"))
		{
			myLocale = Locale.CHINA;
			Icon icon = new ImageIcon("E:\\maven\\MVN\\project\\internation\\src\\main\\resources\\China.png");
			JLabel picture = new JLabel(icon,JLabel.CENTER);
			panel2.add(picture);
			
		}
		else if( nation.equals("english"))
		{
			myLocale = Locale.US;
			//System.out.println("选择了正确的国家");
			logger.log(System.Logger.Level.DEBUG,"选择了正确的国家");
			Icon icon = new ImageIcon("E:\\maven\\MVN\\project\\internation\\src\\main\\resources\\us.png");
			JLabel picture = new JLabel(icon,JLabel.CENTER);
			panel2.add(picture);
		}
		else
		{
			myLocale = Locale.getDefault(Locale.Category.FORMAT);
			
		}
		final ResourceBundle bundle =ResourceBundle.getBundle("internation",myLocale);
		name.setText(bundle.getString("name"));
		show.setText(bundle.getString("show"));
		frame.setTitle(bundle.getString("frame"));
		frame.add(panel2);

		//到这里为止		
		JButton btn = new JButton(bundle.getString("btn"));
		
		frame.add(btn,BorderLayout.SOUTH);
		
		//国际化日期
		DateFormat df = DateFormat.getDateInstance(FULL,myLocale);
		Action yes = new AbstractAction()
		{
			public void actionPerformed(ActionEvent e)
			{
				String msg = bundle.getString("hello");
				
				show.setText(MessageFormat.format(msg,edit.getText(),df.format(new Date())));

			}
		};
		btn.addActionListener(yes);

		frame.setSize(800,600);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

细水长流cpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值