MetalInternalFrameTitlePanepublic class MetalInternalFrameTitlePane extends BasicInternalFrameTitlePane Class that manages a JLF title bar |
Fields Summary |
---|
protected boolean | isPalette | protected Icon | paletteCloseIcon | protected int | paletteTitleHeight | private static final Border | handyEmptyBorder | private String | selectedBackgroundKeyKey used to lookup Color from UIManager. If this is null,
getWindowTitleBackground is used. | private String | selectedForegroundKeyKey used to lookup Color from UIManager. If this is null,
getWindowTitleForeground is used. | private String | selectedShadowKeyKey used to lookup shadow color from UIManager. If this is null,
getPrimaryControlDarkShadow is used. | private boolean | wasClosableBoolean indicating the state of the JInternalFrame s
closable property at updateUI time. | int | buttonsWidth | MetalBumps | activeBumps | MetalBumps | inactiveBumps | MetalBumps | paletteBumps | private Color | activeBumpsHighlight | private Color | activeBumpsShadow |
Constructors Summary |
---|
public MetalInternalFrameTitlePane(JInternalFrame f)
super( f );
|
Methods Summary |
---|
public void | addNotify()
super.addNotify();
// This is done here instead of in installDefaults as I was worried
// that the BasicInternalFrameUI might not be fully initialized, and
// that if this resets the closable state the BasicInternalFrameUI
// Listeners that get notified might be in an odd/uninitialized state.
updateOptionPaneState();
| protected void | addSubComponents()Override the parent's method avoid creating a menu bar. Metal frames
do not have system menus.
add(iconButton);
add(maxButton);
add(closeButton);
| protected void | addSystemMenuItems(javax.swing.JMenu systemMenu)Override the parent's method to do nothing. Metal frames do not
have system menus.
| protected void | assembleSystemMenu()Override the parent's method to do nothing. Metal frames do not
have system menus.
| protected void | createButtons()
super.createButtons();
Boolean paintActive = frame.isSelected() ? Boolean.TRUE:Boolean.FALSE;
iconButton.putClientProperty("paintActive", paintActive);
iconButton.setBorder(handyEmptyBorder);
maxButton.putClientProperty("paintActive", paintActive);
maxButton.setBorder(handyEmptyBorder);
closeButton.putClientProperty("paintActive", paintActive);
closeButton.setBorder(handyEmptyBorder);
// The palette close icon isn't opaque while the regular close icon is.
// This makes sure palette close buttons have the right background.
closeButton.setBackground(MetalLookAndFeel.getPrimaryControlShadow());
if (MetalLookAndFeel.usingOcean()) {
iconButton.setContentAreaFilled(false);
maxButton.setContentAreaFilled(false);
closeButton.setContentAreaFilled(false);
}
| protected java.awt.LayoutManager | createLayout()
return new MetalTitlePaneLayout();
| protected java.beans.PropertyChangeListener | createPropertyChangeListener()
return new MetalPropertyChangeHandler();
| protected void | installDefaults()
super.installDefaults();
setFont( UIManager.getFont("InternalFrame.titleFont") );
paletteTitleHeight
= UIManager.getInt("InternalFrame.paletteTitleHeight");
paletteCloseIcon = UIManager.getIcon("InternalFrame.paletteCloseIcon");
wasClosable = frame.isClosable();
selectedForegroundKey = selectedBackgroundKey = null;
if (MetalLookAndFeel.usingOcean()) {
setOpaque(true);
}
| public void | paintComponent(java.awt.Graphics g)
if(isPalette) {
paintPalette(g);
return;
}
boolean leftToRight = MetalUtils.isLeftToRight(frame);
boolean isSelected = frame.isSelected();
int width = getWidth();
int height = getHeight();
Color background = null;
Color foreground = null;
Color shadow = null;
MetalBumps bumps;
String gradientKey;
if (isSelected) {
if (!MetalLookAndFeel.usingOcean()) {
closeButton.setContentAreaFilled(true);
maxButton.setContentAreaFilled(true);
iconButton.setContentAreaFilled(true);
}
if (selectedBackgroundKey != null) {
background = UIManager.getColor(selectedBackgroundKey);
}
if (background == null) {
background = MetalLookAndFeel.getWindowTitleBackground();
}
if (selectedForegroundKey != null) {
foreground = UIManager.getColor(selectedForegroundKey);
}
if (selectedShadowKey != null) {
shadow = UIManager.getColor(selectedShadowKey);
}
if (shadow == null) {
shadow = MetalLookAndFeel.getPrimaryControlDarkShadow();
}
if (foreground == null) {
foreground = MetalLookAndFeel.getWindowTitleForeground();
}
activeBumps.setBumpColors(activeBumpsHighlight, activeBumpsShadow,
UIManager.get("InternalFrame.activeTitleGradient") !=
null ? null : background);
bumps = activeBumps;
gradientKey = "InternalFrame.activeTitleGradient";
} else {
if (!MetalLookAndFeel.usingOcean()) {
closeButton.setContentAreaFilled(false);
maxButton.setContentAreaFilled(false);
iconButton.setContentAreaFilled(false);
}
background = MetalLookAndFeel.getWindowTitleInactiveBackground();
foreground = MetalLookAndFeel.getWindowTitleInactiveForeground();
shadow = MetalLookAndFeel.getControlDarkShadow();
bumps = inactiveBumps;
gradientKey = "InternalFrame.inactiveTitleGradient";
}
if (!MetalUtils.drawGradient(this, g, gradientKey, 0, 0, width,
height, true)) {
g.setColor(background);
g.fillRect(0, 0, width, height);
}
g.setColor( shadow );
g.drawLine ( 0, height - 1, width, height -1);
g.drawLine ( 0, 0, 0 ,0);
g.drawLine ( width - 1, 0 , width -1, 0);
int titleLength = 0;
int xOffset = leftToRight ? 5 : width - 5;
String frameTitle = frame.getTitle();
Icon icon = frame.getFrameIcon();
if ( icon != null ) {
if( !leftToRight )
xOffset -= icon.getIconWidth();
int iconY = ((height / 2) - (icon.getIconHeight() /2));
icon.paintIcon(frame, g, xOffset, iconY);
xOffset += leftToRight ? icon.getIconWidth() + 5 : -5;
}
if(frameTitle != null) {
Font f = getFont();
g.setFont(f);
FontMetrics fm = SwingUtilities2.getFontMetrics(frame, g, f);
int fHeight = fm.getHeight();
g.setColor(foreground);
int yOffset = ( (height - fm.getHeight() ) / 2 ) + fm.getAscent();
Rectangle rect = new Rectangle(0, 0, 0, 0);
if (frame.isIconifiable()) { rect = iconButton.getBounds(); }
else if (frame.isMaximizable()) { rect = maxButton.getBounds(); }
else if (frame.isClosable()) { rect = closeButton.getBounds(); }
int titleW;
if( leftToRight ) {
if (rect.x == 0) {
rect.x = frame.getWidth()-frame.getInsets().right-2;
}
titleW = rect.x - xOffset - 4;
frameTitle = getTitle(frameTitle, fm, titleW);
} else {
titleW = xOffset - rect.x - rect.width - 4;
frameTitle = getTitle(frameTitle, fm, titleW);
xOffset -= SwingUtilities2.stringWidth(frame, fm, frameTitle);
}
titleLength = SwingUtilities2.stringWidth(frame, fm, frameTitle);
SwingUtilities2.drawString(frame, g, frameTitle, xOffset, yOffset);
xOffset += leftToRight ? titleLength + 5 : -5;
}
int bumpXOffset;
int bumpLength;
if( leftToRight ) {
bumpLength = width - buttonsWidth - xOffset - 5;
bumpXOffset = xOffset;
} else {
bumpLength = xOffset - buttonsWidth - 5;
bumpXOffset = buttonsWidth + 5;
}
int bumpYOffset = 3;
int bumpHeight = getHeight() - (2 * bumpYOffset);
bumps.setBumpArea( bumpLength, bumpHeight );
bumps.paintIcon(this, g, bumpXOffset, bumpYOffset);
| public void | paintPalette(java.awt.Graphics g)
boolean leftToRight = MetalUtils.isLeftToRight(frame);
int width = getWidth();
int height = getHeight();
if (paletteBumps == null) {
paletteBumps
= new MetalBumps(0, 0,
MetalLookAndFeel.getPrimaryControlHighlight(),
MetalLookAndFeel.getPrimaryControlInfo(),
MetalLookAndFeel.getPrimaryControlShadow() );
}
Color background = MetalLookAndFeel.getPrimaryControlShadow();
Color darkShadow = MetalLookAndFeel.getPrimaryControlDarkShadow();
g.setColor(background);
g.fillRect(0, 0, width, height);
g.setColor( darkShadow );
g.drawLine ( 0, height - 1, width, height -1);
int xOffset = leftToRight ? 4 : buttonsWidth + 4;
int bumpLength = width - buttonsWidth -2*4;
int bumpHeight = getHeight() - 4;
paletteBumps.setBumpArea( bumpLength, bumpHeight );
paletteBumps.paintIcon( this, g, xOffset, 2);
| public void | setPalette(boolean b)
isPalette = b;
if (isPalette) {
closeButton.setIcon(paletteCloseIcon);
if( frame.isMaximizable() )
remove(maxButton);
if( frame.isIconifiable() )
remove(iconButton);
} else {
closeButton.setIcon(closeIcon);
if( frame.isMaximizable() )
add(maxButton);
if( frame.isIconifiable() )
add(iconButton);
}
revalidate();
repaint();
| protected void | showSystemMenu()Override the parent's method to do nothing. Metal frames do not
have system menus.
| protected void | uninstallDefaults()
super.uninstallDefaults();
if (wasClosable != frame.isClosable()) {
frame.setClosable(wasClosable);
}
| private void | updateOptionPaneState()Updates any state dependant upon the JInternalFrame being shown in
a JOptionPane .
int type = -2;
boolean closable = wasClosable;
Object obj = frame.getClientProperty("JInternalFrame.messageType");
if (obj == null) {
// Don't change the closable state unless in an JOptionPane.
return;
}
if (obj instanceof Integer) {
type = ((Integer) obj).intValue();
}
switch (type) {
case JOptionPane.ERROR_MESSAGE:
selectedBackgroundKey =
"OptionPane.errorDialog.titlePane.background";
selectedForegroundKey =
"OptionPane.errorDialog.titlePane.foreground";
selectedShadowKey = "OptionPane.errorDialog.titlePane.shadow";
closable = false;
break;
case JOptionPane.QUESTION_MESSAGE:
selectedBackgroundKey =
"OptionPane.questionDialog.titlePane.background";
selectedForegroundKey =
"OptionPane.questionDialog.titlePane.foreground";
selectedShadowKey =
"OptionPane.questionDialog.titlePane.shadow";
closable = false;
break;
case JOptionPane.WARNING_MESSAGE:
selectedBackgroundKey =
"OptionPane.warningDialog.titlePane.background";
selectedForegroundKey =
"OptionPane.warningDialog.titlePane.foreground";
selectedShadowKey = "OptionPane.warningDialog.titlePane.shadow";
closable = false;
break;
case JOptionPane.INFORMATION_MESSAGE:
case JOptionPane.PLAIN_MESSAGE:
selectedBackgroundKey = selectedForegroundKey = selectedShadowKey =
null;
closable = false;
break;
default:
selectedBackgroundKey = selectedForegroundKey = selectedShadowKey =
null;
break;
}
if (closable != frame.isClosable()) {
frame.setClosable(closable);
}
|
|