gpt4 book ai didi

java - 为什么在双击和命令提示符时 Java 应用程序的行为不同

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:43 25 4
gpt4 key购买 nike

我有一个 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 个 JLabel 之一后添加了以下字体更改

lblDate.setForeground(Color.gray);
lblDate.setFont(boldFont.deriveFont(Font.PLAIN, timeFontSize));

这是它的外观的屏幕截图。左边的那个显然有我正在寻找的抗锯齿和干净的文本渲染,而右边的那个更胖而且不那么锐利。 (我还临时加了红色边框,表示paint方法生效了)

编辑 2:

似乎当我双击时,JVM 是 1.7 而我的 IDE 使用 JDK 1.6我不明白为什么字体的 RenderingHints 在 Java6 和 Java7 上看起来不一样,它们在两个 API 中都在运行,并且无一异常(exception)地运行......

如有任何帮助,我们将不胜感激。

最佳答案

似乎对我来说工作得很好......

从左到右,在IDE中,从命令行双击...

enter image description here

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestPaintLabel {

public static void main(String[] args) {
new TestPaintLabel();
}

public TestPaintLabel() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}

JLabel lblDate = new JLabel("Hello, is it me you're looking for?") {
private static final long serialVersionUID = 1L;

@Override
protected void paintComponent(Graphics g) {

Graphics2D g2d = (Graphics2D) g.create();

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);
g2d.setColor(Color.RED);
g2d.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
g2d.dispose();

}

@Override
public Dimension getPreferredSize() {
return new Dimension(200, 50);
}

};

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());
frame.add(lblDate);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}

尝试添加一些额外的绘画以确定是否实际调用了 paint 方法。

关于java - 为什么在双击和命令提示符时 Java 应用程序的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com