コマンドプロンプトを使用して起動する場合とは異なり、jarファイルをダブルクリックしてWindowsで起動した場合の動作が異なるJavaアプリケーションがあります。
私が特に気付いている動作は、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つのJLabelのいずれかを作成した後、次のフォント変更を追加することにも言及する必要があります
lblDate.setForeground(Color.gray);
lblDate.setFont(boldFont.deriveFont(Font.PLAIN, timeFontSize));
これがその様子のスクリーンショットです。左側のものは明らかに私が探しているアンチエイリアシングとクリーンなテキストレンダリングを持っていますが、右側のものは太くてシャープではありません。(また、ペイント方法が有効であることを示すために、一時的に赤い境界線を追加しました)
編集2:
JVMが1.7で、IDEがJDK 1.6を使用している場合、フォントのRenderingHintsがJava6とJava7で同じように表示されない理由がわかりません。どちらのAPIでも、例外なく実行されます...
どんな助けでもいただければ幸いです。