?? simpleinternalframe.java
字號:
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 isSelected;
}
/**
* 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();
isSelected = 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 selected true to lookup the active color, false for the inactive
* @return the color of the foreground text
*/
protected Color getTextForeground(boolean selected) {
Color c =
UIManager.getColor(
selected
? "SimpleInternalFrame.activeTitleForeground"
: "SimpleInternalFrame.inactiveTitleForeground");
if (c != null) {
return c;
}
return UIManager.getColor(
selected
? "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");
if (c != null)
return c;
if (LookUtils.IS_LAF_WINDOWS_XP_ENABLED)
c = UIManager.getColor("InternalFrame.activeTitleGradient");
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 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);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -