- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在用 java 制作 swing 应用程序,当然,还有按钮。我决定通过带有图标字体的 JLabel 制作它们以获得良好的可扩展性。我用标签尝试了 Font Awesome,效果很好:
Font font = Font.createFont(Font.TRUETYPE_FONT, int.class.getResourceAsStream("/fonts/fontawesome.ttf")).deriveFont(20f);
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout(FlowLayout.TRAILING, 20, 20));
JLabel label1 = new JLabel("\uF144");
label1.setFont(font);
frame.add(label1);
JLabel label2 = new JLabel("\uF1B0");
label2.setFont(font);
frame.add(label2);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
因此,我使用图标字体生成器 (Fontello) 并选择了所需的图标。我将生成的字体添加到我的应用程序中,更改了代码并进行了测试运行......但我没有看到它们:它们只是没有出现!
我写了测试代码(我制作了带有红色边框的图标,看看会发生什么):
final Font[] font = {Font.createFont(Font.TRUETYPE_FONT, int.class.getResourceAsStream("/fonts/fontello.ttf"))};
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout(FlowLayout.TRAILING, 20, 20));
JLabel size = new JLabel("Size: " + font[0].getSize2D());
frame.add(size);
// I have 12 icons in font
JLabel[] labels = new JLabel[12];
int j = 0;
// There are codes of those icons
for(char i = '\uE800'; i <= '\uE80B'; i++)
{
JLabel label1 = new JLabel("" + i);
label1.setFont(font[0]);
label1.setBorder(new LineBorder(Color.RED, 1));
label1.setForeground(Color.black);
frame.add(label1);
labels[j++] = label1;
}
frame.add(new JButton(new AbstractAction("-1")
{
@Override
public void actionPerformed(ActionEvent e)
{
font[0] = font[0].deriveFont(font[0].getSize2D() - 1);
size.setText("Size: " + font[0].getSize2D());
for(JLabel label: labels)
{
label.setFont(font[0]);
}
}
}));
frame.add(new JButton(new AbstractAction("+1")
{
@Override
public void actionPerformed(ActionEvent e)
{
font[0] = font[0].deriveFont(font[0].getSize2D() + 1);
size.setText("Size: " + font[0].getSize2D());
for(JLabel label: labels)
{
label.setFont(font[0]);
}
}
}));
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
我看到了什么?一些发布是成功的:
(每次运行我都会增加字体大小)
有些不是:
如您所见,在尺寸为 8 时我不能说会发生什么,开始尺寸为 9 - 由于某种原因根本没有绘制字符。
WTF?这是 swing 中的错误还是字体有问题?
最佳答案
因此,这不是已发现问题的解决方案,而是解决方法。我编写了自己的 swing 组件,它根据给定字体绘制给定字形:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.geom.Rectangle2D;
public class FontIconGlyphButton extends JComponent
{
// to avoid wrong glyph codes
public interface FontIconGlyphCode
{
char toCharCode();
}
private final Color color;
private final Color hoverColor;
private final Color disabledColor;
private final Font font;
private GlyphVector vector;
private Rectangle2D size;
private FontIconGlyphCode iconCode;
private boolean hover = false;
public FontIconGlyphButton(Font font, FontIconGlyphCode iconCode, Color color, Color hoverColor, Color disabledColor)
{
this(font, iconCode, color, hoverColor, disabledColor, null);
}
public FontIconGlyphButton(Font font, FontIconGlyphCode iconCode, Color color, Color hoverColor, Color disabledColor, ActionListener listener)
{
this.font = font;
this.color = color;
this.hoverColor = hoverColor;
this.disabledColor = disabledColor;
setIconCode(iconCode);
addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
if(listener != null)
listener.actionPerformed(new ActionEvent(e.getSource(), e.getID(), Action.DEFAULT));
}
@Override
public void mouseEntered(MouseEvent e)
{
hover = true;
repaint();
}
@Override
public void mouseExited(MouseEvent e)
{
hover = false;
repaint();
}
});
}
public void setIconCode(FontIconGlyphCode iconCode)
{
this.iconCode = iconCode;
FontRenderContext context = new FontRenderContext(null, true, true);
vector = font.createGlyphVector(context, String.valueOf(iconCode.toCharCode()));
size = vector.getGlyphMetrics(0).getBounds2D();
repaint();
}
public FontIconGlyphCode getIconCode()
{
return iconCode;
}
@Override
protected void paintComponent(Graphics g1)
{
Graphics2D g = (Graphics2D) g1;
g.setColor(isEnabled() ? (hover ? hoverColor : color) : disabledColor);
g.drawGlyphVector(vector, (float) -size.getX(), (float) -size.getY());
}
@Override
public Dimension getMinimumSize()
{
return size.getBounds().getSize();
}
@Override
public Dimension getPreferredSize()
{
return size.getBounds().getSize();
}
}
关于java - swing 中的图标字体 : font icons not appear in JLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30491397/
将以下内容添加到我的键绑定(bind)中可以让我将 Sublime Text 3 中的字体大小重置为默认大小: { "keys": ["ctrl+0"], "command": "reset_font
我有一个如下所示的 css 字体系列(由于显示限制,我已经缩短了它,否则它比我在这里展示的要大得多)现在你能告诉我是否有办法将 url()content 转换为 .ttf 字体格式或其他标准字体格式吗
具体来说... and ...显示为双倍或四倍。 最佳答案 Customize Twitter Bootstrap here. Make sure to uncheck the default "
当包含 @font-face 和 src 以导入网络字体时,我注意到您可以传入 2 个可选值。我目前不这样做。 我有 2 种网络字体,Lato Regular 和 Lato Bold。 我应该在 @f
我正在本地主机上测试一个字体很棒的网站,它工作正常;但是当我将它上传到我的远程站点时,它不再显示字体了。我该如何解决?尝试了所有调试但没有成功。 网站在那里 www.sevotec.it/ordine
我开始使用 font-squirrel (http://www.fontsquirrel.com/tools/webfont-generator) 来快速使我的字体跨浏览器兼容,我只是想知道字体质量是
以前我复制了一个ttf文件到C:\Windows\Fonts,点击文件显示字体,然后点击[安装],一切正常。 当我现在执行此过程时,字体未安装在 C:\Windows\Fonts 中,而是安装在 C:
我注意到,在工作中,Google Web字体未出现在IE9和Firefox 6(Windows和Mac OS)上。所有文件都已加载,但字体从未渲染。在那些相同的浏览器上,它可以在家正常工作。 Chro
我正在学习 Swift UI 教程,我遇到了这个错误,而讲师没有。 .font 错误在第一个 Vstack 中仅出现一次,而第二次则没有问题。 import SwiftUI struct Conten
我知道使用@font-face 允许浏览器下载自定义字体并在网页中使用它,就像使用任何系统字体一样。 我想知道的是浏览器是对字体进行编码还是在不公开的情况下使用它? 谢谢 最佳答案 浏览器无法保护字体
使用基于@font-face 标记的标准fontsquirrel .. 字体呈现在较粗的一面。下面是一个屏幕截图,以几种不同的方式展示了字体。顶部是 photoshop 的渲染图,第二个是相同字体的
我必须在元素中使用花哨的字体,但我真的很想避免使用 sifr 和其他丑陋的替代品,所以我正在寻找@font-face。 但是,我真的很困惑几个博客/网站提供了关于它的可用性的不同观点。准备好了吗?目前
我几乎在我工作的所有项目中都使用 fontawesome。但这次我得到的图标显示为正方形。我还尝试了 stackoverflow 上列出的几乎所有解决方案,但似乎对我的情况没有任何效果。我猜是什么东西
好的,所以我正在尝试让 IE9 显示字体 Agenda。我像往常一样去了 fontsquirrel,它说 font bureau 不允许他们创建字体套件。然后我去了 codeandmore 并在那里制
Font Awesome 4.0是对 Font Awesome 从头开始的完全重写。主要的新功能之一是图标现在具有命名空间。除了命名空间之外,图标还使用基于一致性和可预测性的新命名约定。不幸的是,
我使用版本 3.2.9 (Media Mark) 的 SASS 并且我想使用我的自定义 font-family 的 3 个变体Source Sans Pro 字体(Light、Regular、Bold
在一些 css 文件中嵌入一些 base64 字体,但 CSP 阻止了这些:类似于 url("data:font/woff;base64,d09GRk9UVE...); 当前 CSP =“base-u
我怎样才能使 Font Awesome 图标像本页中那样大: http://fontawesome.io/icon/bath/ 我使用了 fa-5x 类,但它与页面示例中最大的图标不同。 下面是我使用
我有一个带有Bootsrap 4(SASS)和Font Awesome 5的MVC项目。我正在尝试使旋转的图标可以与Ajax加载面板一起使用,但是它不起作用。 Test Spin
似乎 font-awesome 支持自定义图标,并附有详细说明如何创建和提交您自己的图标,但该信息在他们的网站上不再可用。这是否意味着不再支持此功能并且您只能请求由 font-awesome 团队完成
我是一名优秀的程序员,十分优秀!