当我把窗口设置为非透明的时候,字体看起来变了!谁能告诉我为什么,帮助我,谢谢!我猜这是受"RenderingHints.KEY_ANTIALIASING“的影响,但我测试了很多方面,这不是我想要的结果。
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setUndecorated(true);
AWTUtilities.setWindowOpaque(frame, false);
JPanel mainPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 20, 10));
mainPanel.add(new JLabel("Why this changed?"));
JLabel lbl2 = new JLabel() {
@Override
public void paint(Graphics g) {
// super.paint(g);
// ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.drawString("There is no change", 0, 15);
}
};
lbl2.setPreferredSize(new Dimension(240, 22));
mainPanel.add(lbl2);
JPanel toolPanel = new JPanel(new FlowLayout());
final JCheckBox ckxWindowOpaque = new JCheckBox("WindowOpaque");
ckxWindowOpaque.setSelected(!AWTUtilities.isWindowOpaque(frame));
ActionListener al = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean b = AWTUtilities.isWindowOpaque(frame);
if (b == !ckxWindowOpaque.isSelected()) return;
if (b) {
AWTUtilities.setWindowOpaque(frame, false);
} else {
AWTUtilities.setWindowOpaque(frame, true);
}
}
};
ckxWindowOpaque.addActionListener(al);
toolPanel.add(ckxWindowOpaque);
toolPanel.add(new JButton(new AbstractAction("Exit") {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}));
frame.getContentPane().add(toolPanel, BorderLayout.NORTH);
frame.getContentPane().add(mainPanel, BorderLayout.CENTER);
((JComponent) frame.getContentPane()).setBorder(BorderFactory.createLineBorder(Color.black));
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setBounds(200, 200, 200, 200);
frame.setVisible(true);
}发布于 2013-12-20 02:30:08
我一直在调试和跟踪我的程序,我找到了关键代码here:SwingUtilities2.drawString/drawChars/drawTextAntialiased.。因此,我在“SwingUaryties2.DrawString/drawChars”中修改了JRE的代码,我添加了如下代码:
if (UIManager.getBoolean("MYLAF.AATextInfo.Disable")) {
g.drawChars(data, offset, length, x, y);
return nextX;
}最后,在我的程序开始时,我添加了设置"UIManager.put("MYLAF.AATextInfo.Disable",true)“。
如果不修改"myJComponent.setClientProperty(AA_TEXT_PROPERTY_KEY,,则可以使用SwingUtilities2 )“。
发布于 2013-12-19 02:15:53
这将与Swing/AWT如何处理不透明和透明窗口与内部对反混叠的更改之间的不同需求有关。
例如,如果我使用
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);为了渲染文本,我可以让它在透明的情况下以相同的方式呈现


我也从VALUE_TEXT_ANTIALIAS_DEFAULT,VALUE_TEXT_ANTIALIAS_GASP得到了同样的结果
但是,如果我使用VALUE_TEXT_ANTIALIAS_LCD_HBGR或VALUE_TEXT_ANTIALIAS_LCD_HRGB,它在这两种模式中的作用都将与JLabel相同。
这些都是系统级别的决策,我不认为您可以(很容易)影响它们。
您可能想看看液晶文本:条纹上的反混叠,这是一个有趣的阅读,但我不确定它会有多大帮助……
https://stackoverflow.com/questions/20672141
复制相似问题