uiflite/0000755000175000017500000000000011377561436012414 5ustar alessioalessiouiflite/src/0000755000175000017500000000000011377561436013203 5ustar alessioalessiouiflite/src/com/0000755000175000017500000000000011377561436013761 5ustar alessioalessiouiflite/src/com/jgoodies/0000755000175000017500000000000011377561436015564 5ustar alessioalessiouiflite/src/com/jgoodies/uif_lite/0000755000175000017500000000000011377561436017364 5ustar alessioalessiouiflite/src/com/jgoodies/uif_lite/component/0000755000175000017500000000000011377561436021366 5ustar alessioalessiouiflite/src/com/jgoodies/uif_lite/component/Factory.java0000644000175000017500000000777411377561436023657 0ustar alessioalessio/* * Copyright (c) 2000-2009 JGoodies Karsten Lentzsch. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * o Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * o Neither the name of JGoodies Karsten Lentzsch nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.jgoodies.uif_lite.component; import java.awt.Component; import java.awt.Insets; import javax.swing.*; /** * A very light version of the JGoodies UIFactory class. * It consists only of static methods to create frequently used components. * * @author Karsten Lentzsch * @version $Revision: 1.5 $ */ public final class Factory { private Factory() { // Overrides default constructor; prevents instantiation. } /** Defines the margin used in toolbar buttons. */ private static final Insets TOOLBAR_BUTTON_MARGIN = new Insets(1, 1, 1, 1); /** * Creates and answers a JScrollPane that has an empty * border. */ public static JScrollPane createStrippedScrollPane(Component component) { JScrollPane scrollPane = new JScrollPane(component); scrollPane.setBorder(BorderFactory.createEmptyBorder()); return scrollPane; } /** * Creates and returns a JSplitPane that has empty borders. * Useful to avoid duplicate decorations, for example if the split pane * is contained by other components that already provide a border. * * @param orientation the split pane's orientation: horizontal or vertical * @param comp1 the top/left component * @param comp2 the bottom/right component * @param resizeWeight indicates how to distribute extra space * @return a split panes that has an empty border */ public static JSplitPane createStrippedSplitPane(int orientation, Component comp1, Component comp2, double resizeWeight) { JSplitPane split = UIFSplitPane.createStrippedSplitPane(orientation, comp1, comp2); split.setResizeWeight(resizeWeight); return split; } /** * Creates and answers an AbstractButton * configured for use in a JToolBar.

* * Superceded by ToolBarButton from the JGoodies UI framework. */ public static AbstractButton createToolBarButton(Action action) { JButton button = new JButton(action); button.setFocusPainted(false); button.setMargin(TOOLBAR_BUTTON_MARGIN); //button.setHorizontalTextPosition(SwingConstants.CENTER); //button.setVerticalTextPosition(SwingConstants.BOTTOM); button.setText(""); return button; } }uiflite/src/com/jgoodies/uif_lite/component/UIFSplitPane.java0000644000175000017500000002476211377561436024507 0ustar alessioalessio/* * Copyright (c) 2000-2009 JGoodies Karsten Lentzsch. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * o Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * o Neither the name of JGoodies Karsten Lentzsch nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.jgoodies.uif_lite.component; import java.awt.Component; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JSplitPane; import javax.swing.UIManager; import javax.swing.plaf.SplitPaneUI; import javax.swing.plaf.basic.BasicSplitPaneUI; /** * A JSplitPane subclass that can try to remove the divider border. * Useful if the splitted components render their own borders. * Note that this feature is not supported by all look&feels. * Some look&feel implementation will always show a divider border, * and conversely, others will never show a divider border. * * @author Karsten Lentzsch * @version $Revision: 1.5 $ * * @see javax.swing.plaf.basic.BasicSplitPaneUI */ public final class UIFSplitPane extends JSplitPane { /** * Holds the name of the bound property that tries to show or hide * the split pane's divider border. * * @see #isDividerBorderVisible() * @see #setDividerBorderVisible(boolean) */ public static final String PROPERTYNAME_DIVIDER_BORDER_VISIBLE = "dividerBorderVisible"; /** * Determines whether the divider border shall be removed when * the UI is updated. * * @see #isDividerBorderVisible() * @see #setDividerBorderVisible(boolean) */ private boolean dividerBorderVisible; // Instance Creation ***************************************************** /** * Constructs a UIFSplitPane configured to arrange the child * components side-by-side horizontally with no continuous * layout, using two buttons for the components. */ public UIFSplitPane() { this(JSplitPane.HORIZONTAL_SPLIT, false, new JButton(UIManager.getString("SplitPane.leftButtonText")), new JButton(UIManager.getString("SplitPane.rightButtonText"))); } /** * Constructs a UIFSplitPane configured with the * specified orientation and no continuous layout. * * @param newOrientation JSplitPane.HORIZONTAL_SPLIT or * JSplitPane.VERTICAL_SPLIT * @throws IllegalArgumentException if orientation * is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT. */ public UIFSplitPane(int newOrientation) { this(newOrientation, false); } /** * Constructs a UIFSplitPane with the specified * orientation and redrawing style. * * @param newOrientation JSplitPane.HORIZONTAL_SPLIT or * JSplitPane.VERTICAL_SPLIT * @param newContinuousLayout a boolean, true for the components to * redraw continuously as the divider changes position, false * to wait until the divider position stops changing to redraw * @throws IllegalArgumentException if orientation * is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT */ public UIFSplitPane(int newOrientation, boolean newContinuousLayout) { this(newOrientation, newContinuousLayout, null, null); } /** * Constructs a UIFSplitPane with the specified orientation * and the given componenents. * * @param orientation JSplitPane.HORIZONTAL_SPLIT or * JSplitPane.VERTICAL_SPLIT * @param leftComponent the Component that will * appear on the left of a horizontally-split pane, * or at the top of a vertically-split pane * @param rightComponent the Component that will * appear on the right of a horizontally-split pane, * or at the bottom of a vertically-split pane * @throws IllegalArgumentException if orientation * is not one of: HORIZONTAL_SPLIT or VERTICAL_SPLIT */ public UIFSplitPane(int orientation, Component leftComponent, Component rightComponent) { this(orientation, false, leftComponent, rightComponent); } /** * Constructs a UIFSplitPane with the specified orientation, * redrawing style, and given components. * * @param orientation JSplitPane.HORIZONTAL_SPLIT or * JSplitPane.VERTICAL_SPLIT * @param continuousLayout a boolean, true for the components to * redraw continuously as the divider changes position, false * to wait until the divider position stops changing to redraw * @param leftComponent the Component that will * appear on the left * of a horizontally-split pane, or at the top of a * vertically-split pane * @param rightComponent the Component that will * appear on the right * of a horizontally-split pane, or at the bottom of a * vertically-split pane * @throws IllegalArgumentException if orientation * is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT */ public UIFSplitPane(int orientation, boolean continuousLayout, Component leftComponent, Component rightComponent){ super(orientation, continuousLayout, leftComponent, rightComponent); dividerBorderVisible = false; } /** * Constructs a UIFSplitPane, * i.e. a JSplitPane that has no borders. * Also disabled the one touch exandable property. * * @param orientation JSplitPane.HORIZONTAL_SPLIT or * JSplitPane.VERTICAL_SPLIT * @param leftComponent the Component that will * appear on the left of a horizontally-split pane, * or at the top of a vertically-split pane * @param rightComponent the Component that will * appear on the right of a horizontally-split pane, * or at the bottom of a vertically-split pane * @throws IllegalArgumentException if orientation * is not one of: HORIZONTAL_SPLIT or VERTICAL_SPLIT */ public static UIFSplitPane createStrippedSplitPane( int orientation, Component leftComponent, Component rightComponent) { UIFSplitPane split = new UIFSplitPane(orientation, leftComponent, rightComponent); split.setBorder(BorderFactory.createEmptyBorder()); split.setOneTouchExpandable(false); return split; } // Accessing Properties ************************************************** /** * Checks and answers whether the divider border shall be visible * or invisible. * Note that this feature is not supported by all look&feels. * Some look&feel implementation will always show a divider border, * and conversely, others will never show a divider border. * * @return the desired (but potentially inaccurate) divider border visiblity */ public boolean isDividerBorderVisible() { return dividerBorderVisible; } /** * Makes the divider border visible or invisible. * Note that this feature is not supported by all look&feels. * Some look&feel implementation will always show a divider border, * and conversely, others will never show a divider border. * * @param newVisibility true for visible, false for invisible */ public void setDividerBorderVisible(boolean newVisibility) { boolean oldVisibility = isDividerBorderVisible(); if (oldVisibility == newVisibility) return; dividerBorderVisible = newVisibility; firePropertyChange(PROPERTYNAME_DIVIDER_BORDER_VISIBLE, oldVisibility, newVisibility); } // Changing the Divider Border Visibility ********************************* /** * Updates the UI and sets an empty divider border. The divider border * may be restored by a L&F at UI installation time. And so, we * try to reset it each time the UI is changed. */ public void updateUI() { super.updateUI(); if (!isDividerBorderVisible()) setEmptyDividerBorder(); } /** * Sets an empty divider border if and only if the UI is * an instance of BasicSplitPaneUI. */ private void setEmptyDividerBorder() { SplitPaneUI splitPaneUI = getUI(); if (splitPaneUI instanceof BasicSplitPaneUI) { BasicSplitPaneUI basicUI = (BasicSplitPaneUI) splitPaneUI; basicUI.getDivider().setBorder(BorderFactory.createEmptyBorder()); } } }uiflite/src/com/jgoodies/uif_lite/panel/0000755000175000017500000000000011377561436020463 5ustar alessioalessiouiflite/src/com/jgoodies/uif_lite/panel/SimpleInternalFrame.java0000644000175000017500000003666211377561436025244 0ustar alessioalessio/* * Copyright (c) 2000-2009 JGoodies Karsten Lentzsch. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * o Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * o Neither the name of JGoodies Karsten Lentzsch nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.jgoodies.uif_lite.panel; import java.awt.*; import javax.swing.*; import javax.swing.border.AbstractBorder; /** * A JPanel subclass that has a drop shadow border and * that provides a header with icon, title and tool bar.

* * This class can be used to replace the JInternalFrame, * for use outside of a JDesktopPane. * The SimpleInternalFrame is less flexible but often * more usable; it avoids overlapping windows and scales well * up to IDE size. * Several customers have reported that they and their clients feel * much better with both the appearance and the UI feel.

* * The SimpleInternalFrame provides the following bound properties: * frameIcon, title, toolBar, content, selected.

* * By default the SimpleInternalFrame is in selected state. * If you don't do anything, multiple simple internal frames will * be displayed as selected. * * @author Karsten Lentzsch * @version $Revision: 1.8 $ * * @see javax.swing.JInternalFrame * @see javax.swing.JDesktopPane */ public class SimpleInternalFrame extends JPanel { private final JLabel titleLabel; private GradientPanel gradientPanel; private JPanel headerPanel; private boolean selected; // Instance Creation **************************************************** /** * Constructs a SimpleInternalFrame with a default title. * This constructor is intended for visual editors. */ public SimpleInternalFrame() { this("Title"); } /** * Constructs a SimpleInternalFrame with the specified title. * The title is intended to be non-blank, or in other words * should contain non-space characters. * * @param title the initial title */ public SimpleInternalFrame(String title) { this(null, title, null, null); } /** * Constructs a SimpleInternalFrame with the specified * icon, and title. * * @param icon the initial icon * @param title the initial title */ public SimpleInternalFrame(Icon icon, String title) { this(icon, title, null, null); } /** * Constructs a SimpleInternalFrame with the specified * title, tool bar, and content panel. * * @param title the initial title * @param bar the initial tool bar * @param content the initial content pane */ public SimpleInternalFrame(String title, JToolBar bar, JComponent content) { this(null, title, bar, content); } /** * Constructs a SimpleInternalFrame with the specified * icon, title, tool bar, and content panel. * * @param icon the initial icon * @param title the initial title * @param bar the initial tool bar * @param content the initial content pane */ public SimpleInternalFrame( Icon icon, String title, JToolBar bar, JComponent content) { super(new BorderLayout()); this.selected = false; this.titleLabel = new JLabel(title, icon, SwingConstants.LEADING); JPanel top = buildHeader(titleLabel, bar); add(top, BorderLayout.NORTH); if (content != null) { setContent(content); } setBorder(new ShadowBorder()); setSelected(true); updateHeader(); } // Public API *********************************************************** /** * Returns the frame's icon. * * @return the frame's icon */ public Icon getFrameIcon() { return titleLabel.getIcon(); } /** * Sets a new frame icon. * * @param newIcon the icon to be set */ public void setFrameIcon(Icon newIcon) { Icon oldIcon = getFrameIcon(); titleLabel.setIcon(newIcon); firePropertyChange("frameIcon", oldIcon, newIcon); } /** * Returns the frame's title text. * * @return String the current title text */ public String getTitle() { return titleLabel.getText(); } /** * Sets a new title text. * * @param newText the title text tp be set */ public void setTitle(String newText) { String oldText = getTitle(); titleLabel.setText(newText); firePropertyChange("title", oldText, newText); } /** * Returns the current toolbar, null if none has been set before. * * @return the current toolbar - if any */ public JToolBar getToolBar() { return headerPanel.getComponentCount() > 1 ? (JToolBar) headerPanel.getComponent(1) : null; } /** * Sets a new tool bar in the header. * * @param newToolBar the tool bar to be set in the header */ public void setToolBar(JToolBar newToolBar) { JToolBar oldToolBar = getToolBar(); if (oldToolBar == newToolBar) { return; } if (oldToolBar != null) { headerPanel.remove(oldToolBar); } if (newToolBar != null) { newToolBar.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); headerPanel.add(newToolBar, BorderLayout.EAST); } updateHeader(); firePropertyChange("toolBar", oldToolBar, newToolBar); } /** * Returns the content - null, if none has been set. * * @return the current content */ public Component getContent() { return hasContent() ? getComponent(1) : null; } /** * Sets a new panel content; replaces any existing content, if existing. * * @param newContent the panel's new content */ public void setContent(Component newContent) { Component oldContent = getContent(); if (hasContent()) { remove(oldContent); } add(newContent, BorderLayout.CENTER); firePropertyChange("content", oldContent, newContent); } /** * Answers if the panel is currently selected (or in other words active) * or not. In the selected state, the header background will be * rendered differently. * * @return boolean a boolean, where true means the frame is selected * (currently active) and false means it is not */ public boolean isSelected() { return selected; } /** * This panel draws its title bar differently if it is selected, * which may be used to indicate to the user that this panel * has the focus, or should get more attention than other * simple internal frames. * * @param newValue a boolean, where true means the frame is selected * (currently active) and false means it is not */ public void setSelected(boolean newValue) { boolean oldValue = isSelected(); selected = newValue; updateHeader(); firePropertyChange("selected", oldValue, newValue); } // Building ************************************************************* /** * Creates and answers the header panel, that consists of: * an icon, a title label, a tool bar, and a gradient background. * * @param label the label to paint the icon and text * @param bar the panel's tool bar * @return the panel's built header area */ private JPanel buildHeader(JLabel label, JToolBar bar) { gradientPanel = new GradientPanel(new BorderLayout(), getHeaderBackground()); label.setOpaque(false); gradientPanel.add(label, BorderLayout.WEST); gradientPanel.setBorder(BorderFactory.createEmptyBorder(3, 4, 3, 1)); headerPanel = new JPanel(new BorderLayout()); headerPanel.add(gradientPanel, BorderLayout.CENTER); setToolBar(bar); headerPanel.setBorder(new RaisedHeaderBorder()); headerPanel.setOpaque(false); return headerPanel; } /** * Updates the header. */ private void updateHeader() { gradientPanel.setBackground(getHeaderBackground()); gradientPanel.setOpaque(isSelected()); titleLabel.setForeground(getTextForeground(isSelected())); headerPanel.repaint(); } /** * Updates the UI. In addition to the superclass behavior, we need * to update the header component. */ public void updateUI() { super.updateUI(); if (titleLabel != null) { updateHeader(); } } // Helper Code ********************************************************** /** * Checks and answers if the panel has a content component set. * * @return true if the panel has a content, false if it's empty */ private boolean hasContent() { return getComponentCount() > 1; } /** * Determines and answers the header's text foreground color. * Tries to lookup a special color from the L&F. * In case it is absent, it uses the standard internal frame forground. * * @param isSelected true to lookup the active color, false for the inactive * @return the color of the foreground text */ protected Color getTextForeground(boolean isSelected) { Color c = UIManager.getColor( isSelected ? "SimpleInternalFrame.activeTitleForeground" : "SimpleInternalFrame.inactiveTitleForeground"); if (c != null) { return c; } return UIManager.getColor( isSelected ? "InternalFrame.activeTitleForeground" : "Label.foreground"); } /** * Determines and answers the header's background color. * Tries to lookup a special color from the L&F. * In case it is absent, it uses the standard internal frame background. * * @return the color of the header's background */ protected Color getHeaderBackground() { Color c = UIManager.getColor("SimpleInternalFrame.activeTitleBackground"); return c != null ? c : UIManager.getColor("InternalFrame.activeTitleBackground"); } // Helper Classes ******************************************************* // A custom border for the raised header pseudo 3D effect. private static class RaisedHeaderBorder extends AbstractBorder { private static final Insets INSETS = new Insets(1, 1, 1, 0); public Insets getBorderInsets(Component c) { return INSETS; } public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) { g.translate(x, y); g.setColor(UIManager.getColor("controlLtHighlight")); g.fillRect(0, 0, w, 1); g.fillRect(0, 1, 1, h-1); g.setColor(UIManager.getColor("controlShadow")); g.fillRect(0, h-1, w, 1); g.translate(-x, -y); } } // A custom border that has a shadow on the right and lower sides. private static class ShadowBorder extends AbstractBorder { private static final Insets INSETS = new Insets(1, 1, 3, 3); public Insets getBorderInsets(Component c) { return INSETS; } public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) { Color shadow = UIManager.getColor("controlShadow"); if (shadow == null) { shadow = Color.GRAY; } Color lightShadow = new Color(shadow.getRed(), shadow.getGreen(), shadow.getBlue(), 170); Color lighterShadow = new Color(shadow.getRed(), shadow.getGreen(), shadow.getBlue(), 70); g.translate(x, y); g.setColor(shadow); g.fillRect(0, 0, w - 3, 1); g.fillRect(0, 0, 1, h - 3); g.fillRect(w - 3, 1, 1, h - 3); g.fillRect(1, h - 3, w - 3, 1); // Shadow line 1 g.setColor(lightShadow); g.fillRect(w - 3, 0, 1, 1); g.fillRect(0, h - 3, 1, 1); g.fillRect(w - 2, 1, 1, h - 3); g.fillRect(1, h - 2, w - 3, 1); // Shadow line2 g.setColor(lighterShadow); g.fillRect(w - 2, 0, 1, 1); g.fillRect(0, h - 2, 1, 1); g.fillRect(w-2, h-2, 1, 1); g.fillRect(w - 1, 1, 1, h - 2); g.fillRect(1, h - 1, w - 2, 1); g.translate(-x, -y); } } /** * A panel with a horizontal gradient background. */ private static final class GradientPanel extends JPanel { private GradientPanel(LayoutManager lm, Color background) { super(lm); setBackground(background); } public void paintComponent(Graphics g) { super.paintComponent(g); if (!isOpaque()) { return; } Color control = UIManager.getColor("control"); int width = getWidth(); int height = getHeight(); Graphics2D g2 = (Graphics2D) g; Paint storedPaint = g2.getPaint(); g2.setPaint( new GradientPaint(0, 0, getBackground(), width, 0, control)); g2.fillRect(0, 0, width, height); g2.setPaint(storedPaint); } } }uiflite/LICENSE.txt0000644000175000017500000000323211377561436014237 0ustar alessioalessio The BSD License for the JGoodies Looks ====================================== Copyright (c) 2001-2009 JGoodies Karsten Lentzsch. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: o Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. o Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. o Neither the name of JGoodies Karsten Lentzsch nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. uiflite/RELEASE-NOTES.txt0000644000175000017500000007756311377561436015145 0ustar alessioalessio JGoodies Looks Version 2.3.1 Release Notes INTRODUCTION This maintenance update fixes an issue with classic Windows combo boxes in white-on-black contrast mode. BUG FIXES o The Windows classic L&f combo box arrow button paints the arrow icon always in black, ignoring the desktop color theme. --------------------------------------------------------------------------- JGoodies Looks Version 2.3.0 Release Notes INTRODUCTION This update adds support for Windows 7 and Windows Server 2008 R2. CHANGES o Introduced LookUtils#IS_OS_WINDOWS_6_OR_LATER that replaces #IS_OS_WINDOWS_VISTA. The latter is now deprecated. o The final marker has been removed from WindowsLookAndFeel. --------------------------------------------------------------------------- JGoodies Looks Version 2.2.2 Release Notes INTRODUCTION This update fixes a minor issues on Vista with Java 5. BUG FIXES o Poor menu selection foreground on Vista with Java 5. o Fixed a potential NPE in WindowsFieldCaret#focusLost. OTHER CHANGES o Removed the ExtBasicArrowButtonHandler that is now obsolete. --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.2.1 Release Notes INTRODUCTION This maintenance update fixes minor issues with read-only text. BUG FIXES o Increased the preferred width of text fields by 1 pixel to avoid scrolling non-editable content without border (static text). OTHER CHANGES o Non-editable text fields honor the global and per-component setting for selection on keyboard focus gain. --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.2.0 Release Notes INTRODUCTION This maintenance update adds features useful for tweaking the text field selection on keyboard focus gain. The JGoodies Windows L&f now uses "Windows" as ID to comply with the LookAndFeel#getID specification. NEW FEATURES o The feature that selects text field text on focus gain can now be enabled or disabled globally, and it can be overridden per field. See Options#setSelectOnFocusGainEnabled(boolean) and #setSelectOnFocusGain(JTextField, Boolean). As before, the feature is enabled by default. o If the select on focus gain is enabled, the selection is from start to end by default. The selection bias can be configured as end to start using Options#INVERT_SELECTION_CLIENT_KEY. Useful if the field contains text that typically will be reentered and where the leading text is more important than the trail. o On focus lost the caret can be positioned at the start. See Options#SET_CARET_TO_START_ON_FOCUS_LOST_CLIENT_KEY. This is useful for short fields where the lead text shall be visible after focus lost, because it is more important than the trail. BUG FIXES o The select on focus gain is applied only to editable fields. OTHER CHANGES o JGoodies WindowsLookAndFeel#getID now returns "Windows" where it returned "JGoodies Windows" before. o Updated to the Forms 1.2.1. o Minor source code improvements. --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.1.4 Release Notes INTRODUCTION This maintenance update contains bug fixes, primarily for Java 6 update 1 or later on Windows Vista. BUGS FIXED #171: Menu rendering incorrect on Vista #173: NPE in PlasticLookAndFeel#getDefaultXPTheme #174: Invisible combo box items in Vista file chooser Plastic menu opaque after switching L&f. --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.1.3 Release Notes INTRODUCTION This update contains minor bug fixes and a tiny enhancement. BUGS FIXED #166: NPE if PlasticXP checkbox or radio text is null #169: RTL orientation ignored for JOptionPane buttons OTHER CHANGES o Added the ability to add a null replacement for a given l&f class name. See Options#initializeDefaultReplacements --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.1.2 Release Notes INTRODUCTION This maintenance update contains a few minor improvements. BUGS FIXED #163: Formatted text field content not selected after focus gained #165: Rollover mode in JToolBar is lost after first switching L&F OTHER CHANGES #161: Plastic file chooser ignores system icons. You can enable system icons by calling UIManager.put("FileChooser.useSystemIcons", Boolean.TRUE) before installing a Plastic L&f. #162: Tree +/- invisible on dark background --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.1.1 Release Notes INTRODUCTION This maintenance update just fixes bugs in version 2.1.0. BUGS FIXED #154: Editable JComboBox size problem with border and GroupLayout #155: Exception with icon-less disabled JTabbedPane tabs #157: Plastic question & warning icons are reversed OTHER CHANGES #156: Content of JSpinner not selected after keyboard focus gain o Added missing icons to the Simple Looks Demo's demo.jar. --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.1.0 Release Notes INTRODUCTION This JGoodies Looks version 2.1 fixes bugs, comes with a few improvements and adds micro layout customization. Version 2.1 is binary incompatible with previous versions. However the changes will affect only very few API users. The most visible changes are a new gray filter for icons, new Plastic icons, Vista improvements, and that text is selected after keyboard focus changes. The micro layout API allows to customize the insets, margins, and gaps used in the components. The default micro layout aims to comply with the "Microsoft Layout Specification and Guidelines". The default is used for the JGoodies Windows L&f and the Plastic L&f family. Since most native Windows applications don't comply with the Windows style guide, you may wish to change the micro layout to be closer to a given native app, such as MS Office, MS Internet Explorer, etc. From my perspective the micro layout specified in the Windows style guide is best for Windows, and it's good on other platforms. It aims to reduce visual noise by using consistent component sizes and text positions for all components that are arranged in a row. Therefore I recommend to use the default micro layout. A custom micro layout may be useful, if you design many large forms and vertical space is scarce. You can then define smaller insets to gain more space. CHANGES THAT AFFECT THE COMPATIBILITY o Removed the deprecated Options.IS_NARROW_KEY. Use Options#setUseNarrowButtons(boolean) instead. o Removed the deprecated Options.TEXT_AREA_INFO_BACKGROUND_KEY. We suggest to use a factory that vends JTextArea's with the background set to the editable background instead. o Removed the deprecated methods PlasticLookAndFeel#getMyCurrentTheme and PlasticLookAndFeel#setMyCurrentTheme. These have been replaced in the Looks 2.0 by #getPlasticTheme and #setPlasticTheme. o Key constants for setting a FontPolicy by name have been renamed to be consistent with the feature they describe, e.g. "Plastic.fontChoicePolicy" -> "Plastic.fontPolicy". This won't affect you if you use the API method xxxLookAndFeel#setFontPolicy or the key value from the Options class, for example Options.PLASTIC_FONT_POLICY_KEY BUGS FIXED #088: SplitPaneDivider ignores the opaque property of the split pane. #111: RTL menus have problems with accelerator alignment. #128: Windows XP table header border is wrong. #131: Tabbed pane content is not properly centered in WinXP L&f. #150: Vista read-only combo renderer not transparent. #152: Vista read-only combo box lacks focus dashed rect. #???: NPE in ShadowPopup#hide NEW FEATURES #087: Added a new gray filter for disabled icons in Java 5 and later. It can be enabled or disabled globally; it is on by default. The global setting can be overridden per component, see: Options.setHiResGrayFilterEnabled and the Options#HI_RES_DISABLED_ICON_CLIENT_KEY client property key. #116: Provide option to customize the component micro layout. #117: Consider removing more combo box renderer borders. Added the Options.COMBO_RENDERER_IS_BORDER_REMOVABLE hint for combo box renders that indicates whether a border can be temporarily removed when painting the current value. This is useful for custom Windows combo renderers. #151: Select text field text after focus gained by keyboard. This is done in the Windows L&f, and can be enabled for Plastic, see PlasticLookandFeel#setSelectTextOnKeyboardFocusGained. For Plastic this feature is enabled by default on Windows. OTHER CHANGES #040: Consider improving instance reuse. #048: Add 3D icons for PlasticXP's tree collapse/expand. #093: Consider making PlasticXP spinner buttons round. #132: PlasticXP checkbox/radio button without text doesn't paint focus. #133: Consider making PlasticXP toolbar button rollover border round. o Plastic uses Tango icons, see www.tango-project.org. o Plastic option pane icon size honors the software resolution. --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.0.4 Release Notes INTRODUCTION This maintenance release fixes a severe regression (issue #142) that affects the JGoodies Windows L&fs in classic Windows mode on Java 1.4/Java 1.5 where a window displays a JPasswordField. It is strongly recommended to update your Looks library version. Also, the font choice in Chinese, Korean, and other non-western environments has been improved for the case where the Java env lacks the multi-language files. BUGS FIXED #141: fonttest.jar manifest classpath broken. #142: Broken classic Windows password field in 1.4 and 1.5. #143: Broken font choice in non-western envs that lack i18n files OTHER CHANGES o FontTest shows more detailed internationalization data. o Added a JUnit test for Fonts#canDisplayLocalizedText(Font, Locale). --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.0.3 Release Notes INTRODUCTION This maintenance release fixes a regression, comes with improved support for the Windows Vista Beta2, and ships the Plastic themes "Experience Royale" for XP's Royale style, and "Light Gray" for Vista's Aero style. BUGS FIXED #130: Plastic internal frames paint wrong drop shadow. #135: Fonts#getWindowsControlFont returns null on Vista Beta2. #136: NPE in DefaultPlasticOnWindowsPolicy on Vista Beta2. #137: Component height too small on Vista Beta2. #138: Add a color theme that mimics Vista's Aero default. NEW FEATURES o Added the Plastic themes "Experience Royale" and "Light Gray". o Improved the mechanism that chooses the default Plastic theme to detect Luna Normal/Home Stead/Metallic, the MS Royale skin, and Vista's Aero. "Experience Royale" is the default on XP-Royale, "Light Gray" is the default on Vista-Aero. OTHER CHANGES o Distribution ships with a precompiled Font Test jar. o Removed the Palette2 from the Looks Demo desktop tab. o Minor cleanup in the build.xml and default.properties. --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.0.2 Release Notes INTRODUCTION This maintenance release fixes a regression, a bug, and improves the password field appearance in non-Windows environments. BUGS FIXED #122: Regression: Missing popup menu drop shadows. #123: Windows popup menu may lack the selection background. #127: Spinner editor insets too large since Mustang b82. OTHER CHANGES o Marked Options.TEXT_AREA_INFO_BACKGROUND_KEY as deprecated. We suggest to use a factory that vends JTextArea's with the background set to the editable background instead. You may use a text area that sets the background in #updateUI to ensure that it is refreshed on Look&Feel changes. o Combo box popup uses the combo box width as minimum, even if a popup prototype display value has been set. o The Windows and Plastic password fields now use the UIManager's echo character, share the password view, and this patch is used in Java 1.4 and Java 5 only. o The Looks Demo shows non-editable and disabled spinners. o Improved the selection background of non-editable Windows combo boxes that use a custom renderer. --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.0.1 Release Notes INTRODUCTION This maintenance release fixes a bug that affects those who want to use the visual backward compatible Looks1xWindowsFontPolicy on Windows 95/98/NT/ME. It also fixes two minor bugs that affect all platforms. BUGS FIXED #107: IllegalArgumentException for degenerated popup with shadow. #118: Potentially wrong font for menu item accelerators. #120: NPE in visual backward compatiblity FontPolicy on Windows 98. OTHER CHANGES o Added toolbar tool tips and a keyboard action to the Looks Demo. --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks Version 2.0 Release Notes INTRODUCTION This JGoodies Looks version 2.0 fixes bugs, comes with many improvements and uses an overhauled font lookup. The contained Windows L&f and Plastic L&fs supercede all previous version w.r.t. consistency, design precision, and support for Java 5, Java 6 and Windows Vista. Version 2.0 is binary and visually incompatible with the Looks 1.x; however most API changes are simplifications and the visual changes improve the consistency of your apps. The font lookup in the Windows L&f has been overhauled. Text component insets have been adjusted to better comply with the "Microsoft Layout Specification and Guidelines". Also, Windows Vista is now supported: bounds, insets and font baseline positions are consistent on the Vista betas. The Plastic L&f family component bounds and insets have been adjusted to the new Windows bounds and insets. The Plastic font lookup has been completely overhauled; it is great on Windows and works well on other platforms. The new font customization mechanism allows you to change the fonts per L&f, platform, locale and desktop settings. CHANGES THAT AFFECT THE BINARY COMPATIBILITY The old font options (FontSizeHints, etc) have been replaced by the new FontPolicy mechanism and predefined FontPolicies. o Replaced Options.CONTROL_FONT_KEY and MENU_FONT_KEY by: - PLASTIC_FONT_CHOICE_POLICY_KEY - PLASTIC_CONTROL_FONT_KEY - PLASTIC_MENU_FONT_KEY - WINDOWS_FONT_CHOICE_POLICY_KEY - WINDOWS_CONTROL_FONT_KEY - WINDOWS_MENU_FONT_KEY o Removed Options.EXT_WINDOWS_NAME o Removed Options.FONT_SIZE_HINTS_KEY o Removed Options#getGlobalFontSizeHints o Removed Options#setGlobalFontSizeHints o Removed PlasticLookAndFeel#getFontSizeHints o Removed PlasticLookAndFeel#setFontSizeHints o Removed WindowsLookAndFeel#getFontSizeHints o Removed WindowsLookAndFeel#setFontSizeHints o Removed FontSizeHints o Removed LookUtils#createButtonMargin(boolean) o Removed LookUtils#installNarrowMargin o Removed FontUtils o Options#initializeDefaultReplacements now private o Removed obsolete Plastic themes: SkyBluerTahoma, ExperienceBlueDefaultFont, DesertBluerDefautFont CHANGES THAT AFFECT THE VISUAL COMPATIBILITY Options#getUseNarrowButtons returns true by default. Although the narrow margins are the correct button margins, it leads to poor design if you don't ensure a reasonable minimum width for buttons with a short text, e.g. "OK". You can disable this feature using #setUseNarrowButtons(false), which was the behavior in the JGoodies Looks 1.x. Options.DEFAULT_LOOK_NAME is now PLASTICXP_NAME making PlasticXP the default L&f when chosen via the Options L&f names. PLASTICXP_NAME is also returned by Options#getCrossPlatformLookAndFeelClassName. On Windows 95/98/ME/NT/2000/2003/XP the JGoodies Windows L&f follows the "Microsoft Layout Specifications and Guidelines" even closer than the JGoodies Windows L&f version 1.3. Components that are arranged in a row have perceived bounds of 14 dialog units (dlu). Since Windows XP command buttons (in the default styles) have two transparent lines in the top and bottom, the concrete command button bounds are 2 pixels larger than for the textfield, combo, etc. If you lay out them in a row and center them vertically the perceived (aka visual) bounds will be aligned. On Windows Vista the JGoodies Windows L&f dimensions and insets are based on the "Windows Vista UX Guidelines" version 0.8. The JGoodies sizes differ slightly from the sizes recommended by these guidelines. For example the guidelines recommend to make a text field on 96dpi with normal fonts 20px tall, a combo 21px and buttons 22px (or 13dlu). The JGoodies Windows L&f uses consistent sizes, insets and font baseline positions for all components that are arranged in a row - just as recommended in all previous Windows editions, but based on 13dlu because the new default font Segoe UI is significantly taller. The default font chosen on Windows now honors the desktop font setting (Normal/Large/Extra Large) if supported by the Windows version, Windows language, and Java renderer. Microsoft recommends to use the desktop setting "font size" to get larger fonts, many applications ignore it and just scale with the software resolution (96dpi/120dpi). On 96dpi the new font doesn't differ from the font chosen by the Looks 1.x; it's Tahoma 8pt on modern Windows, and Segoe UI 9pt on Vista. On 120dpi the new font is 1px taller than the font used by the Looks 1.x. The Plastic L&f family uses Windows fonts on Windows and logical fonts on all other platforms. In the Looks 1.x most Plastic themes used the Tahoma font on all platforms. If Tahoma was absent, the logical fonts were used. VISUAL BACKWARD COMPATIBILITY We recommend to use the new default settings and it is strongly recommended to use the new font lookup on Windows. However, here's how you can get the appearance of the Looks 1.x. The configurations listed below must be performed before you install a look&feel. To get the wrong wide button margins, call: Options.setNarrowMargins(false). To use the Looks 1.x fonts in the Windows L&f use: WindowsLookAndFeel.setFontPolicy( FontPolicies.getLooks1xWindowsPolicy()); To use the Looks 1.x fonts in the Plastic L&fs use: PlasticLookAndFeel.setFontPolicy( FontPolicies.getLooks1xPlasticPolicy()); To give Plastic the new fonts on Windows and the Looks 1.x fonts on other platforms use: PlasticLookAndFeel.setFontPolicy( FontPolicies.getTransitionalPlasticPolicy()); You can customize the control font and menu font in the system properties for Windows and Plastic: java -jar -DWindows.controlFont="Tahoma-plain-11" -DWindows.menuFont="Tahoma-plain-12" -DPlastic.controlFont="Tahoma-plain-11" -DPlastic.menuFont="Verdana-bold-12" myapplication.jar If the menu font is not specified, the control font will be used for menus too. BUGS FIXED #10: Plastic looks can't display Chinese, Japanese, Korean. #50: ToolBar 3D effect ignores the orientation. #51: Windows combobox with custom render is too narrow. #60: Wrong combobox height in Java 5 and Java 6. #67: Wrong menu border in Windows XP L&f. #69: Broken menu item anti-aliasing in Java 5 or later. #70: Inconsistent bounds, insets and baselines on Windows Vista. #71: Password echo character too small on Windows Vista. #73: Windows L&f ignores the desktop control font size setting. #74: Color theme lost on Applet refresh. #79: Windows combobox too narrow. #80: Plastic combo arrow button is focusable in Java 6. #81: Wrong icon for "OptionPane.questionIcon" property. #83: Windows tabbed pane has line under selected tab in Java 5 or later if the content border is disabled. #84: Windows L&F combo margin too wide in table. #86: Windows combobox too narrow if the renderer has zero insets. #89: Plastic L&F editable combo margin too large in table. #90: Spinner does not stop the timer when loosing focus. #91: Progress invisible in Plastic Silver theme. #94: Windows default title font shall be plain not bold. #95: Display Windows toolbar drag handles. #96: Fix Windows formatted text field background. #97: Fix text area disabled/non-editable background. #98: Fix Windows disabled non-editable combo background. #100: Fix WindowsXP title color on Java 1.4.2. #101: Windows combo text phantom UI doesn't change with L&f. #102: Plastic menu doesn't restore opaque state. #103: Disabled menu items lack shadow in classic mode. #105: Menu items mnemonic display shall check for show/hide status. #108: JMenu on JPopupMenu not always drawn in selected state. #110: NPE with invalid default Plastic theme set via system props. #111: RTL menus have problems with accelerator alignment. #113: Combo popup with prototype ignores scrollbar visibility. #114: Accelerator text overlaps menu text if no-icons is set. #115: Need a fix for the Java bug 4530952. KNOWN ISSUES Plastic 3D effect broken on Mac OS X Tiger with Java 1.4 and 5. Due to a bug in the Tiger Java2D implementation, the pseudo 3D up and down effects are not rendered. Instead a plain white is painted. See also issue #92. NEW FEATURES #55: Add option to make combo popups wider than the combo. You can set a popup prototype display value that is used to determine with popup widths. o Narrow buttons can be disabled in the system properties. o Added a JPopupMenu client property for no-margin borders, see Options#NO_MARGIN_KEY. This is useful if a JPopupMenu contains a single component, for example a JScrollPane. o Added a JTextArea client property for an info background. This hint is used for non-editable areas that shall use the editable background, not the inactive background. DISTRIBUTION CHANGES o Merged the source folders 'src/common', 'src/plastic' and 'src/windows' to 'src/core'. o The sources no longer ship as a source Zip archive. They now come in the directory structure used by the CVS. This makes it easier to build the distribution using ANT. If you want to attach the library sources in an IDE, point to folder 'src/core'. OTHER CHANGES o The Windows and Plastic L&fs have been tweaked for Windows Vista. o Overhauled the Windows combobox layout and rendering. o Overhauled the Plastic combobox layout and rendering. o Improved appearance of the Looks Demo tabs on Windows. o The ANT build can now create a Maven bundle. o The demo's DemoFrame class accepts a parameter for the L&f: "Windows", "Plastic", "Plastic3D", "PlasticXP", or a full class name like: "com.sun.java.swing.plaf.windows.WindowsLookAndFeel", "javax.swing.plaf.metal.MetalLookAndFeel". --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks, Version 1.3.2 Release Notes INTRODUCTION This update fixes a couple of bugs, most noticably in the drop shadow feature. Also the source code style has been slightly improved. BUGS FIXED #43: ShadowPopupFactory doesn't respect the lightweight property. #45: NPE in ShadowPopup.hide(). #47: JavaCup.gif reported missing in Windows L&f. #50: ToolBarUI doesn't take the orientation into account. #53: ClassCastException in ShadowPopup. #56: NPE in ShadowPopupFactory on OS X 10.4. OTHER CHANGES o Set 'build.compile.source' and 'build.compile.target' to '1.4' in the default.properties; build.xml honors these settings. o Improved the style of the Java sources: + removed some tab characters, + ensured consistent modifier order, + fixed JavaDoc tags. --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks, Version 1.3.1 Release Notes INTRODUCTION This update fixes bug #38; it's worth to ship a new version. All other known non-font related issues could be fixed too. BUGS FIXED o #02: Plastic combo lacks 3D effect in 3D toolbar. o #36: Plastic l&fs lack auditory cues. o #37: Extra non-western themes don't work with Looks 1.3. o #38: Options#isTabIconsEnabled broken. o #39: Poor size for null values in combo box renderer. OTHER CHANGES o Core: Added two Plastic color themes intended for non-western fonts, see DesertBluerDefaultFont and ExperienceBlueDefaultFont. These themes ship in source form, are part of the binary jar, but are not installed as default themes. You can use these themes via PlasticLookAndFeel#setMyCurrentTheme(PlasticTheme). Via PlasticLookAndFeel#installTheme(PlasticTheme) you can include them in the list of known Plastic themes. o Core: PlasticXP spinner uses consistent button widths. o Dist: Startet a JUnit test suite. o Docs: Replaced older package names with the new names. o Build: ANT build file can perform JUnit tests. --------------------------------------------------------------------------- Find below the change history for older releases. JGoodies Looks, Version 1.3 Release Notes INTRODUCTION This release fixes bugs and uses new package and class names. Java 1.5 is now supported, but some micro design improvements made in the Looks are optimized for Java 1.4.2 and Java 1.4.1. BUGS FIXED o Plastic internal frames use the outdated Java cup icon. o Inactive drop shadows still try to snapshot via the Robot. o Broken position calculation in Windows password field. o Broken custom table header in Windows XP style. o #04: Broken Windows JTabbedPane HTML word wrap. o #05: Plastic Theme and Tab Layout Policy. o #17: WindowsToolBarSeparatorUI not same in 1.4.1 and 1.4.2. o #18: Height of menu items with a custom icon. o #20: Popup drop shadow may be corrupted. o #23: Menu items not anti-aliased [in 1.5 with aa enabled]. o #24: Spinners drawn incorrectly. o #27: Plastic JTabbedPane scroll buttons unclear. o #28: Broken painting with custom combo renderer in 1.5. o #30: ShadowPopupBorder may throw a SecurityException. o #31: JToggleButton L&F not respecting icon text gap. CHANGES THAT AFFECT THE BINARY COMPATIBILITY o Package names changed from com.jgoodies.plaf to com.jgoodies.looks o ExtWindowsLookAndFeel -> WindowsLookAndFeel o All ClearLook classes have been removed from the Looks. These will show up as a LintLookAndFeel later. CHANGES THAT AFFECT THE VISUAL COMPATIBILITY o PlasticXP's password field paints a dot, not the star. KNOWN ISSUES For all issues see http://looks.dev.java.net/servlets/ProjectIssues This release still lacks an improved font management for the Plastic l&f family on non-Windows platforms. For a workaround see issue #10. OTHER CHANGES o Core: Uses more shared UI instances. o Docs: Added and fixed version tags. o Dist: Fixed implementation title and vendor in the JAR manifest. o Dist: Fixed broken package information in the JAR manifest. o Demo: Added test case for all tab placements in both layouts. o Build: Added project name tag to the ANT build file. o Build: Added overview page.