more laf options, jdoc
[fanfix.git] / ui / UIUtils.java
index 91a1f61b4b1bb02f7646c8f9910fb6b0140feeb7..7d78d1e8c38669b118dab12828da99c351091b8c 100644 (file)
@@ -8,6 +8,8 @@ import java.awt.Paint;
 import java.awt.RadialGradientPaint;
 import java.awt.RenderingHints;
 
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
 import javax.swing.UIManager;
 import javax.swing.UnsupportedLookAndFeelException;
 
@@ -18,26 +20,47 @@ import javax.swing.UnsupportedLookAndFeelException;
  */
 public class UIUtils {
        /**
-        * Set a fake "native look & feel" for the application if possible
+        * Set a fake "native Look & Feel" for the application if possible
         * (check for the one currently in use, then try GTK).
         * <p>
         * <b>Must</b> be called prior to any GUI work.
+        * 
+        * @return TRUE if it succeeded
         */
-       static public void setLookAndFeel() {
+       static public boolean setLookAndFeel() {
                // native look & feel
+               String noLF = "javax.swing.plaf.metal.MetalLookAndFeel";
+               String lf = UIManager.getSystemLookAndFeelClassName();
+               if (lf.equals(noLF))
+                       lf = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
+               
+               return setLookAndFeel(lf);
+       }
+
+       /**
+        * Switch to the given Look &amp; Feel for the application if possible
+        * (check for the one currently in use, then try GTK).
+        * <p>
+        * <b>Must</b> be called prior to any GUI work.
+        * 
+        * @param laf
+        *            the Look &amp; Feel to use
+        * 
+        * @return TRUE if it succeeded
+        */
+       static public boolean setLookAndFeel(String laf) {
                try {
-                       String noLF = "javax.swing.plaf.metal.MetalLookAndFeel";
-                       String lf = UIManager.getSystemLookAndFeelClassName();
-                       if (lf.equals(noLF))
-                               lf = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
-                       UIManager.setLookAndFeel(lf);
+                       UIManager.setLookAndFeel(laf);
+                       return true;
                } catch (InstantiationException e) {
                } catch (ClassNotFoundException e) {
                } catch (UnsupportedLookAndFeelException e) {
                } catch (IllegalAccessException e) {
                }
+
+               return false;
        }
-       
+
        /**
         * Draw a 3D-looking ellipse at the given location, if the given
         * {@link Graphics} object is compatible (with {@link Graphics2D}); draw a
@@ -56,7 +79,8 @@ public class UIUtils {
         * @param height
         *            the height radius
         */
-       static public void drawEllipse3D(Graphics g, Color color, int x, int y, int width, int height) {
+       static public void drawEllipse3D(Graphics g, Color color, int x, int y,
+                       int width, int height) {
                drawEllipse3D(g, color, x, y, width, height, true);
        }
 
@@ -77,8 +101,8 @@ public class UIUtils {
         *            the width radius
         * @param height
         *            the height radius
-     * @param fill
-     *                           fill the content of the ellipse
+        * @param fill
+        *            fill the content of the ellipse
         */
        static public void drawEllipse3D(Graphics g, Color color, int x, int y,
                        int width, int height, boolean fill) {
@@ -97,7 +121,7 @@ public class UIUtils {
                        } else {
                                g2.drawOval(x, y, width, height);
                        }
-                       
+
                        // Compute dark/bright colours
                        Paint p = null;
                        Color dark = color.darker().darker();
@@ -125,7 +149,7 @@ public class UIUtils {
                        } else {
                                g2.drawOval(x, y, width, height);
                        }
-                       
+
                        // Darken the edges
                        p = new RadialGradientPaint(x + width / 2f, y + height / 2f,
                                        Math.min(width / 2f, height / 2f), new float[] { 0f, 1f },
@@ -162,4 +186,52 @@ public class UIUtils {
                        }
                }
        }
+
+       /**
+        * Add a {@link JScrollPane} around the given panel and use a sensible (for
+        * me) increment for the mouse wheel.
+        * 
+        * @param pane
+        *            the panel to wrap in a {@link JScrollPane}
+        * @param allowHorizontal
+        *            allow horizontal scrolling (not always desired)
+        * 
+        * @return the {@link JScrollPane}
+        */
+       static public JScrollPane scroll(JComponent pane, boolean allowHorizontal) {
+               return scroll(pane, allowHorizontal, true);
+       }
+
+       /**
+        * Add a {@link JScrollPane} around the given panel and use a sensible (for
+        * me) increment for the mouse wheel.
+        * 
+        * @param pane
+        *            the panel to wrap in a {@link JScrollPane}
+        * @param allowHorizontal
+        *            allow horizontal scrolling (not always desired)
+        * @param allowVertical
+        *            allow vertical scrolling (usually yes, but sometimes you only
+        *            want horizontal)
+        * 
+        * @return the {@link JScrollPane}
+        */
+       static public JScrollPane scroll(JComponent pane, boolean allowHorizontal,
+                       boolean allowVertical) {
+               JScrollPane scroll = new JScrollPane(pane);
+
+               scroll.getVerticalScrollBar().setUnitIncrement(16);
+               scroll.getHorizontalScrollBar().setUnitIncrement(16);
+
+               if (!allowHorizontal) {
+                       scroll.setHorizontalScrollBarPolicy(
+                                       JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+               }
+               if (!allowVertical) {
+                       scroll.setVerticalScrollBarPolicy(
+                                       JScrollPane.VERTICAL_SCROLLBAR_NEVER);
+               }
+
+               return scroll;
+       }
 }