package swing.nimbus;

import javax.swing.*;
import javax.swing.tree.DefaultTreeCellRenderer;
import java.awt.*;
import java.awt.event.*;

public class NimbusPropertiesPersists {
    private static JFrame frame;
    private static JTree tree1;
    private static DefaultTreeCellRenderer treeCellRenderer;

    public static void main(String args[]) throws Exception{
        frame = new JFrame();
        tree1 = new JTree();

        Object[] lfs = {"Aqua", "Nimbus", "Metal", "Motif"};
        final JComboBox lfcombo = new JComboBox(lfs);
        lfcombo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String lf = null;
                switch (lfcombo.getSelectedIndex()) {
                    case 0: lf = "com.apple.laf.AquaLookAndFeel";
                        break;
                    case 1: lf = "javax.swing.plaf.nimbus.NimbusLookAndFeel";
                        break;
                    case 2: lf = "javax.swing.plaf.metal.MetalLookAndFeel";
                        break;
                    case 3: lf = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
                        break;
                }
                try {
                    UIManager.setLookAndFeel(lf);
                    SwingUtilities.updateComponentTreeUI(frame);
                } catch (Exception exc) {
                    exc.printStackTrace();
                }
            }
        });


        SwingUtilities.invokeAndWait(() -> {
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.setSize(500,500);
            frame.setVisible(true);
            frame.setLayout(new BorderLayout());

            treeCellRenderer =  new DefaultTreeCellRenderer();
            tree1.setRootVisible(true);
            tree1.setShowsRootHandles(true);

            tree1.setCellRenderer(treeCellRenderer);
            frame.add(lfcombo, BorderLayout.NORTH);
            frame.add(tree1, BorderLayout.SOUTH);
        });
    }
}