3

プロジェクトで Nimbus ルック アンド フィールを使用しています。ただし、すべての GUI JComponent は Nimbus のルック アンド フィールを備えていますが、JFrame は常に Windows のルック アンド フィールを備えています。

JFrame に Nimbus のルック アンド フィールを持たせるにはどうすればよいですか?

編集:オペレーティングシステム:Windows XP

4

5 に答える 5

8

これを使用してみてください:

JFrame.setDefaultLookAndFeelDecorated(true); //before creating JFrames

詳細については、チュートリアルのルック アンド フィールの設定方法を参照してください。


import javax.swing.*;

class FrameLook {

    public static void showFrame(String plaf) {
        try {
            UIManager.setLookAndFeel(plaf);
        } catch(Exception e) {
            e.printStackTrace();
        }
        JFrame f = new JFrame(plaf);
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        f.setSize(400,100);
        f.setLocationByPlatform(true);
        f.setDefaultLookAndFeelDecorated(true);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        showFrame(UIManager.getSystemLookAndFeelClassName());
        showFrame(UIManager.getCrossPlatformLookAndFeelClassName());
        showFrame("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    }
}

フレーム タイトル バーのルック アンド フィール

于 2011-09-30T15:24:23.993 に答える
4

@Andrewの疑惑を確認setDefaultLookAndFeelDecorated()すると、サポートされている場合、「新しく作成されたJFramesはWindow、現在のによって提供される装飾が適用されLookAndFeelます」と述べています。タイトル全体が見えるようにサイズを変更しました。

FrameLook

import javax.swing.*;

class FrameLook {

    public static void showFrame(String plaf) {
        try {
            UIManager.setLookAndFeel(plaf);
        } catch (Exception e) {
            e.printStackTrace(System.out);
        }
        JFrame f = new JFrame(plaf);
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        f.setSize(500, 100);
        f.setLocationByPlatform(true);
        JFrame.setDefaultLookAndFeelDecorated(true);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        showFrame(UIManager.getSystemLookAndFeelClassName());
        showFrame(UIManager.getCrossPlatformLookAndFeelClassName());
        showFrame("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    }
}
于 2011-09-30T22:28:24.730 に答える
2

そして、XP用のWindowsクラシックUIに基づいて確認します。 ここに画像の説明を入力してください

于 2012-02-02T21:15:51.393 に答える
1

Nimbusはウィンドウの装飾をサポートしていないため、直接実行することはできません。そのため、指定された回答があっても、常にシステムウィンドウが表示されます。この非常に単純なコードを試してください。

import javax.swing.LookAndFeel;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

public class DoesNimbusSupportWindowDecorations {

    @SuppressWarnings("unchecked")
    public static void main(String... args) {
        LookAndFeel nimbus = null;
        for (LookAndFeelInfo lafInfo : UIManager.getInstalledLookAndFeels()) {
            if (lafInfo.getName() == "Nimbus") {
                try {
                    nimbus = ((Class<LookAndFeel>) Class.forName(
                            lafInfo.getClassName())).newInstance();
                } catch (Exception e) {
                    System.err.println("Unexpected exception.");
                }
            }
        }

        if (nimbus != null) {
            System.out.println("Nimbus supports window decorations...? "
                    + (nimbus.getSupportsWindowDecorations() ? "YES" : "NO"));
        } else {
            System.err.println("Your system does not support Nimbus, you can't"
                    + " run this test.");
        }
    }

}

または、適切なインポートを使用してコード内に配置します。

System.out.println(new NimbusLookAndFeel().getSupportsWindowDecorations());

私の理解を超えているのは、装飾が内部フレームに存在し、カスタム装飾があるため、Sunがそのようなことを決定した理由です。NimbusはSynthに基づいているため、NimbusLookAndFeelを拡張したり、デフォルトで遊んだりして、これらの装飾を使用できるかどうかを調査します。最善の方法はわかりません。

于 2013-01-04T11:39:19.697 に答える
0

これが私のやり方です。私のEclipseプロジェクトからのコピーペースト。

import javax.swing.UIManager.LookAndFeelInfo;
import java.awt.EventQueue;
import java.awt.BorderLayout;
import javax.swing.*;
public class Frame1 {
    private JFrame frame;
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {

                     for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                            if ("Nimbus".equals(info.getName())) {
                                UIManager.setLookAndFeel(info.getClassName());
                                break;
                            }
                        }
                Frame1 window = new Frame1();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
于 2016-07-21T12:55:04.733 に答える