在将原生外观应用到我的 JFrame 时,我遇到了一个问题,所有文本(HTML 格式的 JLabel 除外)都有丑陋的粗体字体。
以下代码中非常简单的 UI 总结了我在 L&F 中看到的所有差异:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
public class HelloWorld extends JFrame {
public HelloWorld() {
Box b = Box.createVerticalBox();
// Labels
JLabel bold = new JLabel("I'm bold !");
JLabel notBold = new JLabel("<html><em>I'm not bold !</em></html>");
b.add(bold);
b.add(notBold);
// Scrollbars example
JPanel scrollViewPort = new JPanel();
scrollViewPort.setPreferredSize(new Dimension(400, 400));
JScrollPane scroll = new JScrollPane(scrollViewPort);
b.add(scroll);
add(b, BorderLayout.CENTER);
// Bold menu
JMenuBar menubar = new JMenuBar();
JMenu menu = new JMenu("Menu");
JMenuItem item = new JMenuItem("Item");
menu.add(item);
menubar.add(menu);
setJMenuBar(menubar);
setPreferredSize(new Dimension(200, 200));
pack();
}
public static void setNativeLAF() {
// Native L&F
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
System.out.println("Unable to set native look and feel: " + e);
}
}
public static void main(String[] args) {
// setNativeLAF();
HelloWorld app = new HelloWorld();
app.setVisible(true);
}
}
看到不同 :
原生 L&F (GTK+)
与金属 L&F
通过注释掉setNativeLAF()
通话。
当我的应用程序启动时,在任何窗口出现之前,我正在应用本机外观。这UIManager
给了我GTK+ (com.sun.java.swing.plaf.gtk.GTKLookAndFeel)
原生的外观和感觉,这没关系,因为我使用的是 Gnome 3 桌面。
我现在有三个问题:
- GTK+ 的外观和感觉不像 GTK 主题(请参阅滚动条)
- JMenuBar 似乎已禁用(Metal L&F 不是这种情况)
- 字体是粗体!(与金属 L&F 相同的问题,但可以修复)
任何有关 GTK+ L&F 为什么在我的系统上执行此操作的帮助或解释都将不胜感激。
编辑:这是 Eclipse 中我的系统上的“经典”应用程序的样子。