/*
 * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package javax.swing.plaf.metal;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.plaf.basic.*;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import javax.swing.plaf.*;

Metal implementation of JInternalFrame.
Author:Steve Wilson
/** * Metal implementation of JInternalFrame. * * @author Steve Wilson */
public class MetalInternalFrameUI extends BasicInternalFrameUI { private static final PropertyChangeListener metalPropertyChangeListener = new MetalPropertyChangeHandler(); private static final Border handyEmptyBorder = new EmptyBorder(0,0,0,0);
The property JInternalFrame.isPalette.
/** * The property {@code JInternalFrame.isPalette}. */
protected static String IS_PALETTE = "JInternalFrame.isPalette"; private static String IS_PALETTE_KEY = "JInternalFrame.isPalette"; private static String FRAME_TYPE = "JInternalFrame.frameType"; private static String NORMAL_FRAME = "normal"; private static String PALETTE_FRAME = "palette"; private static String OPTION_DIALOG = "optionDialog";
Constructs a new MetalInternalFrameUI instance.
Params:
  • b – an internal frame
/** * Constructs a new {@code MetalInternalFrameUI} instance. * * @param b an internal frame */
public MetalInternalFrameUI(JInternalFrame b) { super(b); }
Constructs a new MetalInternalFrameUI instance.
Params:
  • c – a component
Returns:a new MetalInternalFrameUI instance
/** * Constructs a new {@code MetalInternalFrameUI} instance. * * @param c a component * @return a new {@code MetalInternalFrameUI} instance */
public static ComponentUI createUI(JComponent c) { return new MetalInternalFrameUI( (JInternalFrame) c); } public void installUI(JComponent c) { super.installUI(c); Object paletteProp = c.getClientProperty(IS_PALETTE_KEY); if ( paletteProp != null ) { setPalette( ((Boolean)paletteProp).booleanValue() ); } Container content = frame.getContentPane(); stripContentBorder(content); //c.setOpaque(false); } public void uninstallUI(JComponent c) { frame = (JInternalFrame)c; Container cont = ((JInternalFrame)(c)).getContentPane(); if (cont instanceof JComponent) { JComponent content = (JComponent)cont; if ( content.getBorder() == handyEmptyBorder) { content.setBorder(null); } } super.uninstallUI(c); } protected void installListeners() { super.installListeners(); frame.addPropertyChangeListener(metalPropertyChangeListener); } protected void uninstallListeners() { frame.removePropertyChangeListener(metalPropertyChangeListener); super.uninstallListeners(); } protected void installKeyboardActions(){ super.installKeyboardActions(); ActionMap map = SwingUtilities.getUIActionMap(frame); if (map != null) { // BasicInternalFrameUI creates an action with the same name, we override // it as Metal frames do not have system menus. map.remove("showSystemMenu"); } } protected void uninstallKeyboardActions(){ super.uninstallKeyboardActions(); } protected void uninstallComponents() { titlePane = null; super.uninstallComponents(); } private void stripContentBorder(Object c) { if ( c instanceof JComponent ) { JComponent contentComp = (JComponent)c; Border contentBorder = contentComp.getBorder(); if (contentBorder == null || contentBorder instanceof UIResource) { contentComp.setBorder( handyEmptyBorder ); } } } protected JComponent createNorthPane(JInternalFrame w) { return new MetalInternalFrameTitlePane(w); } private void setFrameType( String frameType ) { if ( frameType.equals( OPTION_DIALOG ) ) { LookAndFeel.installBorder(frame, "InternalFrame.optionDialogBorder"); ((MetalInternalFrameTitlePane)titlePane).setPalette( false ); } else if ( frameType.equals( PALETTE_FRAME ) ) { LookAndFeel.installBorder(frame, "InternalFrame.paletteBorder"); ((MetalInternalFrameTitlePane)titlePane).setPalette( true ); } else { LookAndFeel.installBorder(frame, "InternalFrame.border"); ((MetalInternalFrameTitlePane)titlePane).setPalette( false ); } }
If isPalette is true, sets palette border and title
Params:
  • isPalette – if true, sets palette border and title
/** * If {@code isPalette} is {@code true}, sets palette border and title * * @param isPalette if {@code true}, sets palette border and title */
// this should be deprecated - jcs public void setPalette(boolean isPalette) { if (isPalette) { LookAndFeel.installBorder(frame, "InternalFrame.paletteBorder"); } else { LookAndFeel.installBorder(frame, "InternalFrame.border"); } ((MetalInternalFrameTitlePane)titlePane).setPalette(isPalette); } private static class MetalPropertyChangeHandler implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent e) { String name = e.getPropertyName(); JInternalFrame jif = (JInternalFrame)e.getSource(); if (!(jif.getUI() instanceof MetalInternalFrameUI)) { return; } MetalInternalFrameUI ui = (MetalInternalFrameUI)jif.getUI(); if ( name.equals( FRAME_TYPE ) ) { if ( e.getNewValue() instanceof String ) { ui.setFrameType( (String) e.getNewValue() ); } } else if ( name.equals(IS_PALETTE_KEY) ) { if ( e.getNewValue() != null ) { ui.setPalette( ((Boolean)e.getNewValue()).booleanValue() ); } else { ui.setPalette( false ); } } else if ( name.equals( JInternalFrame.CONTENT_PANE_PROPERTY ) ) { ui.stripContentBorder(e.getNewValue()); } } } // end class MetalPropertyChangeHandler private class BorderListener1 extends BorderListener implements SwingConstants { Rectangle getIconBounds() { boolean leftToRight = MetalUtils.isLeftToRight(frame); int xOffset = leftToRight ? 5 : titlePane.getWidth() - 5; Rectangle rect = null; Icon icon = frame.getFrameIcon(); if ( icon != null ) { if ( !leftToRight ) { xOffset -= icon.getIconWidth(); } int iconY = ((titlePane.getHeight() / 2) - (icon.getIconHeight() /2)); rect = new Rectangle(xOffset, iconY, icon.getIconWidth(), icon.getIconHeight()); } return rect; } public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2 && e.getSource() == getNorthPane() && frame.isClosable() && !frame.isIcon()) { Rectangle rect = getIconBounds(); if ((rect != null) && rect.contains(e.getX(), e.getY())) { frame.doDefaultCloseAction(); } else { super.mouseClicked(e); } } else { super.mouseClicked(e); } } }; /// End BorderListener Class
Returns the MouseInputAdapter that will be installed on the TitlePane.
Params:
  • w – the JInternalFrame
Returns:the MouseInputAdapter that will be installed on the TitlePane.
Since:1.6
/** * Returns the <code>MouseInputAdapter</code> that will be installed * on the TitlePane. * * @param w the <code>JInternalFrame</code> * @return the <code>MouseInputAdapter</code> that will be installed * on the TitlePane. * @since 1.6 */
protected MouseInputAdapter createBorderListener(JInternalFrame w) { return new BorderListener1(); } }