How to set Nimbus look and feel in main

Simon Andi picture Simon Andi · Jan 6, 2011 · Viewed 30k times · Source

I am just learning Java and still have not been able to sort out this little problem I have.

My pop up Calendar uses Nimbus look and feel, but I have panels and container Jtables that use Java's look and feel - I am trying to make every GUI screen/ window use the Nimbus look and feel. It was suggested by Merky to put the following code in my main to make every subsequent screen have the Nimbus look and feel, but I cannot get it to work, so where and how should I put this code?

public static void main(String args[]) {
    SA md = new OptraderSA("Copyright© 2010 Simon Andi");

    Dimension sd = Toolkit.getDefaultToolkit().getScreenSize();

    md.setLocation(sd.width/2-400/2, sd.height/2-400/2);
    md.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    /*Suggested Code*/
    try {
        for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                UIManager.setLookAndFeel(info.getClassName());
                System.out.println("CHOSEN THIS");
                break;
            } else {
                UIManager.setLookAndFeel  ("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            }
        }
    } catch (Exception e) {
        // If Nimbus is not available, you can set to another look and feel.
        // I can't get it to compile or work.
    }

}

Answer

BenjaminLinus picture BenjaminLinus · Jan 6, 2011

This is what I do in my main method to enable Nimbus look and feel:

public static void main(String[] args) {
    try {
        for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (Exception e) {
        // If Nimbus is not available, fall back to cross-platform
        try {
            UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
        } catch (Exception ex) {
            // Not worth my time
        }
    }
    new Controller();
}

You need to be sure to configure the UIManager with the Nimbus look and feel before you start the swing event dispatch thread (before calling view.setVisible(true)).