我有一个 java 应用程序,与使用命令提示符启动它相比,通过双击 jar 文件在 Windows 中启动它时,它的行为有所不同。
我特别注意到的行为是当我覆盖 JLabel 以使用以下内容更好地呈现时
lblDate = new ATimeLabel(ATimeLabel.DATE_LETTERS) {
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
super.paintComponent(g2d);
}
};
当我从我的 IDE 启动应用程序或从命令提示符启动 jar 时会出现效果,但是当我双击我的应用程序时,它会显示没有paintComponent()
覆盖效果的标签。
将不胜感激帮助弄清楚如何能够在双击我的应用程序时产生相同的效果。
编辑:
我还应该提到,我在创建 2 个 JLabels 之一后添加了以下字体更改
lblDate.setForeground(Color.gray);
lblDate.setFont(boldFont.deriveFont(Font.PLAIN, timeFontSize));
这是它的外观的屏幕截图。左边的那个显然具有我正在寻找的抗锯齿和干净的文本渲染,而右边的那个更胖而且不那么锐利。(我也临时加了红色边框,表示paint方法有效)
编辑2:
似乎当我双击 JVM 是 1.7 并且我的 IDE 使用 JDK 1.6 时,我不明白为什么字体的 RenderingHints 在 Java6 和 Java7 上看起来不一样,它们都在 API 中并且运行时没有例外......
任何帮助,将不胜感激。