概要
Font
にUnicode
コードポイントで指定した文字のグリフが存在し、かつ表示可能か確認します。
Screenshot
Advertisement
サンプルコード
int code = 0x1F512;
JLabel label = new JLabel(new String(Character.toChars(code)));
label.setFont(label.getFont().deriveFont(24f));
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.CENTER);
String[] columnNames = {"family", "name", "postscript name", "canDisplay", "isEmpty"};
DefaultTableModel model = new DefaultTableModel(null, columnNames) {
@Override public boolean isCellEditable(int row, int column) {
return false;
}
@Override public Class<?> getColumnClass(int column) {
return column > 2 ? Boolean.class : String.class;
}
};
JTable table = new JTable(model);
Font[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
Stream.of(fonts)
.map(f -> {
String txt = new String(Character.toChars(code));
FontRenderContext frc = getFontMetrics(f).getFontRenderContext();
return new Object[] {
f.getFamily(),
f.getName(),
f.getPSName(),
f.canDisplay(code),
f.createGlyphVector(frc, txt).getVisualBounds().isEmpty()
};
})
.forEach(model::addRow);
View in GitHub: Java, Kotlin解説
上記のサンプルでは絵文字ロック🔒U+1F512
がフォント一覧から選択したフォントで表示可能かをテストしています。
4
列目:Font.canDisplay(int codePoint)
- この
Font
に指定された文字のグリフが含まれているかどうかを調べる false
の場合フォントが指定するゲタ文字が表示される
- この
5
列目:GlyphVector#getVisualBounds()#isEmpty()
- グリフのサイズが
0
かを調べる - 日本語環境の
Ubuntu 29.04
でフォントをSerif
に指定するとFont.canDisplay(int codePoint)
はtrue
になるが、GlyphVector#getVisualBounds()
はサイズ0
で絵文字が表示されない場合がある?
- グリフのサイズが