在Java中绘制文本,外观和感觉问题

我已经覆盖了扩展JToggleButton的paintComponent方法,以便在切换按钮时可以使用TexturePaint填充文本。 我遇到的问题是我似乎无法使用与我的外观相同的字体来绘制文本作为默认设置。 我试过g2d.setFont(this.getFont()); ,“这个”是我正在使用的按钮。 字体很接近,但在绘制时看起来比默认文本更大胆。 是否有更好的方法来绘制文本,使其看起来与默认相同,除了颜色? 提前致谢!

如果要覆盖paintComponent()方法,则应该已将Graphics对象配置为具有切换按钮的Font。 差异可能是因为抗锯齿默认情况下没有打开。

我发现一些代码在非常有限的测试中对我有用。 在paintComponent()方法中尝试以下操作:

Graphics2D g2 = (Graphics2D)g.create(); Toolkit toolkit = Toolkit.getDefaultToolkit(); Map map = (Map)(toolkit.getDesktopProperty("awt.font.desktophints")); if (map != null) { g2.addRenderingHints(map); } g2.drawString(...); g2.dispose(); 

我在这篇文章中被警告过 – 如何在JButton图标的上方和下方设置文本? – 这不适用于所有平台和LAF。 该注释还提供了有关如何绘制文本的建议解决方案。

这个问题类似,并提供了一个答案: 如何获取Swing JTabbedPane标签的默认字体?

我不太确定关键是什么,但是按照这个答案你可能想尝试:

 UIManager.getLookAndFeelDefaults().getFont("ToggleButton.font"); 

编辑

这不是链接问题的片段,但经过一小段测试后,它似乎等同于:

 UIManager.getDefaults().getFont("ToggleButton.font"); 

这是链接问题中给出的代码。

编辑2

我想我找到了解决方案。 返回的默认值只是一个普通字体,我在一个带有该行的示例中解决了这个问题:

 this.setFont(UIManager.getDefaults().getFont("ToggleButton.font").deriveFont(this.getFont().getStyle(), this.getFont().getSize())); 

我的建议(为了使其不那么难看)是为您的类添加默认字体样式和大小的一些私有属性(您可以在构造函数中设置它们):

 fontStyle = this.getFont().getStyle(); fontSize = this.getFont().getSize(); 

然后你可以清理:

 this.setFont(UIManager.getDefaults().getFont("ToggleButton.font").deriveFont(this.fontStyle, this.fontSize));