
如上图所示,左侧工具栏和右侧的文件图标,都是用的fontawesome图标字体,属于Unicode码。好处就是可以自定义字体大小、颜色等,也可以根据手表点击、滑动等实现不同的事件效果。
一、下载fontawesome字体

去fontawesome官网,下载字体样式,项目中只需要用到途中文件。
二、加载字体
fontswesome提供了丰富的图标库,我们可以直接拿来使用,只不过需要进行一步转化。
如下图,打开fontawesome官方图标页面,按F12,选中咖啡图标,在元素页签选中::before,右侧显示字体的content为 \f0f4,代码中需要将其转化为Unicode码,也就是在斜杠后f前加个u变为 \uf0f4。

字体样式工具代码代码:
package com.zhufeng.demo01;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
import java.io.InputStream;
/**
* @ClassName: FontAwesomeUtil
* @Description 获取fontawesome字体样式
* @author 月夜烛峰
* @date 2022/7/7 13:47
*/
public class FontAwesomeUtil {
/**字体文件*/
public final static String ICON_FONT_AWESOME="/font/fontawesome-webfont.ttf";
/********文件展示面板**********/
/**咖啡*/
public final static char FONT_ICON_COFFEE = '\uf0f4';
/**消息*/
public final static char FONT_ICON_BELL = '\uf0f3';
/**设置*/
public final static char FONT_ICON_SETTING = '\uf013';
/**圆形*/
public final static char FONT_ICON_CIRCLE = '\uf111';
/**
* 返回fontawesome字体样式
* @return
*/
public static Font getFontAwesome(int fontSize) {
try {
InputStream in = FontAwesomeUtil.class.getResourceAsStream(ICON_FONT_AWESOME);
Font ttfBase = Font.createFont(Font.TRUETYPE_FONT, in);
Font ttfReal = ttfBase.deriveFont(Font.PLAIN, fontSize);
return ttfReal;
} catch (FontFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 创建FontAwesome文本样式
* @param x
* @param y
* @param g
* @param c
*/
public static void fontAwesomeText(int x, int y, Graphics g, char c) {
g.setFont(getFontAwesome(16));
g.drawString(String.valueOf(c), x, y);
}
/**
* 创建FontAwesome按钮样式
* @param name
* @param c
* @return
*/
public static JButton createFontAwesomeBtn(String name, char c) {
JButton fontBtn = new JButton();
fontBtn.setFont(getFontAwesome(20));
fontBtn.setText(String.valueOf(c));
//设置字体颜色
fontBtn.setForeground(Color.BLUE);
fontBtn.setName(name);
fontBtn.setVerticalTextPosition(0);
fontBtn.setHorizontalTextPosition(0);
//隐藏按钮边框
fontBtn.setBorderPainted(false);
return fontBtn;
}
/**
* 获取字体图标
* @param c
* @param iconLabel
* @return
*/
public static String getLabelFontIcon(char c, JLabel iconLabel) {
iconLabel.setFont(getFontAwesome(16));
//居中
iconLabel.setVerticalTextPosition(JLabel.BOTTOM);
iconLabel.setHorizontalTextPosition(JLabel.CENTER);
return String.valueOf(c);
}
}
三、效果演示

创建样式panel,在panel中通过paintComponent画出一个圆形图标,创建一个蓝色的铃铛按钮,在创建一个字号稍大的咖啡图标。
使用时,就像是指定不同类型的字体font一样,非常方便。
package com.zhufeng.demo01;
import javax.swing.*;
import java.awt.*;
/**
* @ClassName: IconFontPanel
* @Description TODO
* @author 月夜烛峰
* @date 2022/7/13 09:28
*/
public class IconFontPanel extends JPanel {
public IconFontPanel(){
setLayout(null);
JLabel iconLabel = new JLabel();
String iconText = FontAwesomeUtil.getLabelFontIcon(FontAwesomeUtil.FONT_ICON_COFFEE,iconLabel);
iconLabel.setText(iconText);
iconLabel.setForeground(new Color(227, 115, 35));
iconLabel.setFont(FontAwesomeUtil.getFontAwesome(32));
iconLabel.setBounds(160,30,100,80);
add(iconLabel);
//图标按钮
JButton fontBtn = FontAwesomeUtil.createFontAwesomeBtn("bell",FontAwesomeUtil.FONT_ICON_BELL);
fontBtn.setBounds(50,100,80,40);
add(fontBtn);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//画出一个圆形字体
FontAwesomeUtil.fontAwesomeText(260,130,g,FontAwesomeUtil.FONT_ICON_CIRCLE);
}
}
运行窗口
package com.zhufeng.demo01;
import javax.swing.*;
import java.awt.*;
/**
* @ClassName: FontIconDemo
* @Description TODO
* @author 月夜烛峰
* @date 2022/7/13 09:22
*/
public class FontIconDemoFrame {
public static void createAndShowGUI(String title) {
//窗口名称
JFrame frame = new JFrame("月夜烛峰-" + title);
//窗口带有关闭按钮
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//指定窗口大小
frame.setSize(new Dimension(400, 300));
//窗口居中展示
frame.setLocationRelativeTo(null);
//窗口设置为可见
frame.setVisible(true);
frame.add(new IconFontPanel());
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI("图标演示");
}
});
}
}
版权声明:本文为superli0426原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。