【问题标题】:Using Java can I force the Dialog font to default to Arial使用 Java 可以强制对话框字体默认为 Arial
【发布时间】:2012-09-27 03:12:00
【问题描述】:

我有一个应用程序,它使用 Unix 中的默认金属外观。对于 Solaris 10,这意味着 Dialog 字体被翻译为 Arial。对于 Solaris 11,字体文件已移动,因此我的字体已更改。除了我的应用程序中的文件之外,我无法更改任何文件,因此更改 fontconfig.properties 不是一种选择。

1) 有没有办法在应用程序的开头说 Dialog=Arial (and Dialog.Bold = Arial.Bold)?

2) 由于我找不到执行上述操作的方法,我一直在使用 UIManager.put("Menu.font", new Font("Arial, Font.BOLD, 12)) 命令。 这似乎有效(希望我不会错过小部件类型)但是我的 JTree,当我使用默认值时不使用 Label.font,当我调用 UIManager.put("Label .font", new Font("Arial, Font.BOLD, 12))。即使我也有 UIManager.put("Tree.font", new Font("Arial, Font.PLAIN, 12)) 也会发生这种情况。

使用默认值,我的标签是粗体的,而我的树不是。您对这可能会发生什么以及如何将这两种字体分开以便我可以强制它们为 Arial 但标签为粗体和 JTree 纯文本有任何建议吗?

设置 UI 管理器是应用程序要做的第一件事。

【问题讨论】:

  • 为什么逻辑字体 Dialog 在 Solaris 11 中映射到不同的物理字体很重要?
  • 字体映射不同意味着应用程序在两个系统之间看起来不一样。由于字体现在更大,组合框或按钮上的一些值被截断。由于这个应用程序是由客户使用的,而不仅仅是我自己,所以应用程序的外观不会因为客户端从 Solaris 10 升级到 Solaris 11 而改变。

标签: java swing fonts jtree


【解决方案1】:

组合框或按钮上的一些值被截断,因为字体现在更大了。

确实截断文本是abomination,但调整Font 大小不是解决方案。相反,使用合适的布局和pack() 封闭Window,“导致此窗口的大小适合其子组件的首选大小和布局”。这个example比较了几个平台上的同一个程序,每个平台都有不同的物理字体映射到默认字体系列。

由于这种方法在本质上相当通用,因此编辑您的问题以包含一个 sscce 来展示您遇到的特定问题可能会有所帮助。

另见Should I avoid the use of set[Preferred|Maximum|Minimum]Size methods in Java Swing?

【讨论】:

  • 这并不能真正回答问题。
  • @FkYkko:这在什么方面不能回答问题?
  • 问题是“使用 Java 可以强制对话框字体默认为 Arial 吗?”。这个答案根本没有回答这个问题。没有恶意。真的。
  • @FkYkko:在这个答案中,我试图建议 更改字体,主要是因为我不知道用户的根本问题。仔细阅读,这可能与提供JLabelTreeCellRenderer 有关。如果您提出相关问题,请随时添加替代答案或在此处联系我。
猜你喜欢
  • 1970-01-01
  • 2018-08-19
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
相关资源
最近更新 更多