/** * */ package org.javabuilders.swing; import java.util.ResourceBundle; import javax.swing.UIManager; import org.javabuilders.BuildResult; import org.javabuilders.Builder; import org.javabuilders.util.BuilderUtils; import org.javabuilders.util.BuilderUtils.OperatingSystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Swing Builder * * @author Jacek Furmankiewicz */ public class SwingJavaBuilder { private static SwingJavaBuilderConfig config = new SwingJavaBuilderConfig(); private static final Logger LOG = LoggerFactory.getLogger(SwingJavaBuilder.class); public final static String VGAP = "vgap"; public final static String HGAP = "hgap"; public final static String DEFAULT_LAYOUT_MANAGER = "__DefaultSwingLayoutManager__"; public final static String TITLE = "title"; public final static String TEXT = "text"; public final static String TOOL_TIP_TEXT = "toolTipText"; public final static String ACCELERATOR = "accelerator"; public final static String ICON = "icon"; public final static String ACTION = "action"; public final static String LAYOUT_DATA = "layoutData"; public final static String POPUP_MENU = "popupMenu"; /** * The standard property name used to indicate on onKeyPressed event */ public final static String ON_KEY_PRESSED = "onKeyPressed"; public final static String ON_KEY_RELEASED = "onKeyReleased"; public final static String ON_KEY_TYPED = "onKeyTyped"; public final static String ON_MOUSE_CLICKED = "onMouseClicked"; public final static String ON_MOUSE_DOUBLE_CLICKED = "onMouseDoubleClicked"; public final static String ON_MOUSE_RIGHT_CLICKED = "onMouseRightClicked"; public final static String ON_MOUSE_ENTERED = "onMouseEntered"; public final static String ON_MOUSE_EXITED ="onMouseExited"; public final static String ON_MOUSE_PRESSED ="onMousePressed"; public final static String ON_MOUSE_RELEASED = "onMouseReleased"; public final static String ON_STATE_CHANGED = "onStateChanged"; public final static String ON_WINDOW_FOCUS = "onWindowFocus"; public final static String ON_WINDOW_FOCUS_LOST = "onWindowFocusLost"; public final static String ON_WINDOW_ACTIVATED = "onWindowActivated"; public final static String ON_WINDOW_CLOSED = "onWindowClosed"; public final static String ON_WINDOW_CLOSING = "onWindowClosing"; public final static String ON_WINDOW_DEACTIVATED = "onWindowDeactivated"; public final static String ON_WINDOW_DEICONIFIED = "onWindowDeiconified"; public final static String ON_WINDOW_ICONIFIED = "onWindowIconified"; public final static String ON_WINDOW_OPENED = "onWindowOpened"; /** * Property used to flag nodes that should not be processed in any way for layout management (e.g. JSPlitPane) */ public final static String PROPERTY_IGNORE_LAYOUT_MANAGER = "ignoreLayoutManager"; /** * Returns the standard SwingBuilder configuration * @return */ public static SwingJavaBuilderConfig getConfig() { return config; } /** * Main Swing Builder methods * @param caller The calling object (it automatically assumes a YAML file with the same name as the objects class (e.g. "MyFrame.java" needs "MyFrame.yaml" exists in the same package) * @return Build result */ public static BuildResult build(Object caller) { return Builder.build(getConfig(),caller); } /** * Main Swing Builder methods * @param caller The calling object (it automatically assumes a YAML file with the same name as the objects class (e.g. "MyFrame.java" needs "MyFrame.yaml" exists in the same package) * @param bundles Optional list of bundles * @return Build result */ public static BuildResult build(Object caller, ResourceBundle...bundles) { return Builder.build(getConfig(),caller,bundles); } /** * SwingBuilder method that accepts passed in YAML instead of looking for a separate file * @param caller The calling object * @param bundles Optional list of bundles * @param yaml Valid YAML content * @return Buld result */ public static BuildResult build(Object caller, String yaml, ResourceBundle...bundles) { return Builder.buildFromString(getConfig(),caller, yaml, bundles); } /** * Workaround for buggy Sun logic where under certain Linux desktops the GTK+ look is not activated */ public static void initSystemLookAndFeel() { try { String lf = UIManager.getSystemLookAndFeelClassName(); if (BuilderUtils.getOS() == OperatingSystem.LinuxUnix) { //always use GTK+ theme, even under XFCE in Linux lf = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"; } UIManager.setLookAndFeel(lf); } catch (Exception ex) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { LOG.error("Unable to set proper L&F",e); } } } }