文章目录

  • 问题一 加载自定义字体
  • 问题二 设置全局字体
  • 问题三 设置全局字体后,如何在不换字体的情况下更改字体参数



今天写代码的时候测试到一半的时候感觉界面的字体太难看,突发奇想想着改下字体,但把自己电脑翻到底也没招到什么好字体,所以去下载了个不是电脑自带的,为了防止代码移植的时候出现问题,所以又加上了个用字体文件设置的问题。

所以这次解决的的问题这么几点:

问题一 加载自定义字体

测试代码:

public class TestFrame extends JFrame {

	public TestFrame() {
		setBounds(0, 0, 400, 300);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(new FlowLayout());
		
		File file = new File("fonts/方正楷体简体.TTF");
		Font font = null;
		try {
            FileInputStream fi = new FileInputStream(file);
            BufferedInputStream fb = new BufferedInputStream(fi);
            font = Font.createFont(Font.TRUETYPE_FONT, fb);
            font = font.deriveFont(Font.PLAIN, 25);
            
        } catch (Exception e) { }
		
		JLabel label1 = new JLabel("测试Label1");
		JButton button1 = new JButton("测试button1");
		JTextField field1 = new JTextField(10);
		JTextArea area1 = new JTextArea(3, 20);
		label1.setFont(font);
		button1.setFont(font);
		field1.setFont(font);
		area1.setFont(font);
		add(label1);
		add(button1);
		add(field1);
		add(area1);
	}
	
	public static void main(String[] args) {
		TestFrame frame = new TestFrame();
		frame.validate();
	}
	
}

代码参考来源

是否修改字体对比

Java聊天怎么设置字体 java字体设置font_自定义字体

问题二 设置全局字体

Main.java

public class Main {

	public static void main(String[] args) {
		try {
			File file = new File("fonts/方正楷体简体.TTF");
			Font font = null;
            FileInputStream fi = new FileInputStream(file);
            BufferedInputStream fb = new BufferedInputStream(fi);
            font = Font.createFont(Font.TRUETYPE_FONT, fb);
            font = font.deriveFont(Font.PLAIN, 25);
            FontUIResource fontRes = new FontUIResource(font);
    		for (Enumeration<Object> keys = UIManager.getDefaults().keys(); keys.hasMoreElements();) {
    			Object key = keys.nextElement();
    			Object value = UIManager.get(key);
    			if (value instanceof FontUIResource) {
    				UIManager.put(key, fontRes);
    			}
    		}
        } catch (Exception e) { }
		new FirstFrame().validate();
	}
	
}

FirstFrame.java

public class FirstFrame extends JFrame {

	public FirstFrame() {
		setTitle("第一个窗口");
		setBounds(0, 0, 400, 300);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(new FlowLayout());
		JLabel label1 = new JLabel("测试Label1");
		JButton button1 = new JButton("测试button1");
		button1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				new SecondFrame();
			}
		});
		JTextField field1 = new JTextField(10);
		JTextArea area1 = new JTextArea(3, 20);
		add(label1);
		add(button1);
		add(field1);
		add(area1);
	}
}

SecondFrame.java

public class SecondFrame extends JFrame {

	public SecondFrame() {
		setTitle("第二个窗口");
		setBounds(0, 0, 400, 300);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(new FlowLayout());
		JLabel label1 = new JLabel("测试Label1");
		JButton button1 = new JButton("测试button1");
		JTextField field1 = new JTextField(10);
		JTextArea area1 = new JTextArea(3, 20);
		add(label1);
		add(button1);
		add(field1);
		add(area1);
	}
	
}

全局字体设置来源

Java聊天怎么设置字体 java字体设置font_java_02

问题三 设置全局字体后,如何在不换字体的情况下更改字体参数

就像上面两个界面都是直接用了Main.java 设置的字体,那么问题就来了,如果我们仅仅只是想改变某个组件的字体大小呢?总不可能每次都去生成字体在调用吧,所以我找到了一些仅仅只改变原来字体一些参数的方法。

先来看下我们一般用的字体的构造方法吧

public Font(String name, int style, int size);
// name-->字体名 style-->字体样式:斜体粗体类 size-->字体大小

现在来获取当前界面字体

public Font getFont();

但是我们在界面中直接调用这个方法并没有任何效果,这个时候我发现了要先获取当前容器

// JFrame,JDialog 容器获取方法
public Container getContentPane()
// JPanel 容器获取方法 啊,不对,JPanel根本不需要获取容器

好了,当前字体工作已经准备完成了
改变字体的参数

// 改变字体大小
public Font deriveFont(float size);
// 改变字体样式
public Font deriveFont(int style);
// 改变字体名字……呃??名字有啥好改的。。。

来个例子吧

// 在JFrame中
Font font = getContentPane().getFont().deriveFont((float) 10.0);
// 呃。。。我也不知道为什么,反正里面一定要float形,int表示失败。。。
// style 我就不演示了,下面我改变了按钮和文本框的字体大小

Java聊天怎么设置字体 java字体设置font_java_03