1

ネイティブのルックアンドフィールを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(GTK +)

メタルL&F付き

メタルL&F付き

setNativeLAF()呼び出しをコメントアウトすることによって。

アプリケーションの起動時、ウィンドウが表示される前に、ネイティブのルックアンドフィールを適用しています。はネイティブのルックアンドフィールとして私にUIManager与えてくれGTK+ (com.sun.java.swing.plaf.gtk.GTKLookAndFeel)ます。これは、Gnome3デスクトップを使用しているので問題ありません。

私は今これに関して3つの問題を抱えています:

  1. GTK +のルックアンドフィールはGTKテーマのようには見えません(スクロールバーを参照)
  2. JMenuBarが無効になっているようです(Metal L&Fの場合はそうではありません)
  3. フォントは太字です!(Metal L&Fでも同じ問題ですが、修正可能です)

GTK + L&Fが私のシステムでそれを行う理由についてのヘルプや説明をいただければ幸いです。

編集:これが、Eclipseのシステムでの「クラシック」アプリケーションの外観です。

日食

4

1 に答える 1

3

言及する価値のあることがいくつかあります。

  1. 以下に示すように、派生フォントをラベルに適用できます。

  2. コンポーネントsysのHTMLに関連する仕様「 EMの基本的な強調は通常イタリックフォントでレンダリングされます」。

  3. 初期スレッドも参照してください。

ここに画像の説明を入力してください

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
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;

public class HelloWorld extends JFrame {

    public HelloWorld() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Box b = Box.createVerticalBox();

        // Labels
        JLabel bold = new JLabel("I'm bold !");
        bold.setFont(bold.getFont().deriveFont(Font.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, 200));
        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);

        pack();
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                HelloWorld app = new HelloWorld();
                app.setVisible(true);
            }
        });
    }
}
于 2012-06-20T18:54:50.547 に答える