ネイティブのルックアンドフィールを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)
ます。これは、Gnome3デスクトップを使用しているので問題ありません。
私は今これに関して3つの問題を抱えています:
- GTK +のルックアンドフィールはGTKテーマのようには見えません(スクロールバーを参照)
- JMenuBarが無効になっているようです(Metal L&Fの場合はそうではありません)
- フォントは太字です!(Metal L&Fでも同じ問題ですが、修正可能です)
GTK + L&Fが私のシステムでそれを行う理由についてのヘルプや説明をいただければ幸いです。
編集:これが、Eclipseのシステムでの「クラシック」アプリケーションの外観です。