MetalSplitPaneDividerpublic class MetalSplitPaneDivider extends BasicSplitPaneDivider Metal's split pane divider
Warning:
Serialized objects of this class will not be compatible with
future Swing releases. The current serialization support is
appropriate for short term storage or RMI between applications running
the same version of Swing. As of 1.4, support for long term storage
of all JavaBeansTM
has been added to the java.beans package.
Please see {@link java.beans.XMLEncoder}. |
Fields Summary |
---|
private MetalBumps | bumps | private MetalBumps | focusBumps | private int | inset | private Color | controlColor | private Color | primaryControlColor |
Constructors Summary |
---|
public MetalSplitPaneDivider(BasicSplitPaneUI ui)
super(ui);
|
Methods Summary |
---|
protected javax.swing.JButton | createLeftOneTouchButton()Creates and return an instance of JButton that can be used to
collapse the left component in the metal split pane.
JButton b = new JButton() {
// Sprite buffer for the arrow image of the left button
int[][] buffer = {{0, 0, 0, 2, 2, 0, 0, 0, 0},
{0, 0, 2, 1, 1, 1, 0, 0, 0},
{0, 2, 1, 1, 1, 1, 1, 0, 0},
{2, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 3, 3, 3, 3, 3, 3, 3, 3}};
public void setBorder(Border b) {
}
public void paint(Graphics g) {
JSplitPane splitPane = getSplitPaneFromSuper();
if(splitPane != null) {
int oneTouchSize = getOneTouchSizeFromSuper();
int orientation = getOrientationFromSuper();
int blockSize = Math.min(getDividerSize(),
oneTouchSize);
// Initialize the color array
Color[] colors = {
this.getBackground(),
MetalLookAndFeel.getPrimaryControlDarkShadow(),
MetalLookAndFeel.getPrimaryControlInfo(),
MetalLookAndFeel.getPrimaryControlHighlight()};
// Fill the background first ...
g.setColor(this.getBackground());
if (isOpaque()) {
g.fillRect(0, 0, this.getWidth(),
this.getHeight());
}
// ... then draw the arrow.
if (getModel().isPressed()) {
// Adjust color mapping for pressed button state
colors[1] = colors[2];
}
if(orientation == JSplitPane.VERTICAL_SPLIT) {
// Draw the image for a vertical split
for (int i=1; i<=buffer[0].length; i++) {
for (int j=1; j<blockSize; j++) {
if (buffer[j-1][i-1] == 0) {
continue;
}
else {
g.setColor(
colors[buffer[j-1][i-1]]);
}
g.drawLine(i, j, i, j);
}
}
}
else {
// Draw the image for a horizontal split
// by simply swaping the i and j axis.
// Except the drawLine() call this code is
// identical to the code block above. This was done
// in order to remove the additional orientation
// check for each pixel.
for (int i=1; i<=buffer[0].length; i++) {
for (int j=1; j<blockSize; j++) {
if (buffer[j-1][i-1] == 0) {
// Nothing needs
// to be drawn
continue;
}
else {
// Set the color from the
// color map
g.setColor(
colors[buffer[j-1][i-1]]);
}
// Draw a pixel
g.drawLine(j, i, j, i);
}
}
}
}
}
// Don't want the button to participate in focus traversable.
public boolean isFocusTraversable() {
return false;
}
};
b.setRequestFocusEnabled(false);
b.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
b.setFocusPainted(false);
b.setBorderPainted(false);
maybeMakeButtonOpaque(b);
return b;
| protected javax.swing.JButton | createRightOneTouchButton()Creates and return an instance of JButton that can be used to
collapse the right component in the metal split pane.
JButton b = new JButton() {
// Sprite buffer for the arrow image of the right button
int[][] buffer = {{2, 2, 2, 2, 2, 2, 2, 2},
{0, 1, 1, 1, 1, 1, 1, 3},
{0, 0, 1, 1, 1, 1, 3, 0},
{0, 0, 0, 1, 1, 3, 0, 0},
{0, 0, 0, 0, 3, 0, 0, 0}};
public void setBorder(Border border) {
}
public void paint(Graphics g) {
JSplitPane splitPane = getSplitPaneFromSuper();
if(splitPane != null) {
int oneTouchSize = getOneTouchSizeFromSuper();
int orientation = getOrientationFromSuper();
int blockSize = Math.min(getDividerSize(),
oneTouchSize);
// Initialize the color array
Color[] colors = {
this.getBackground(),
MetalLookAndFeel.getPrimaryControlDarkShadow(),
MetalLookAndFeel.getPrimaryControlInfo(),
MetalLookAndFeel.getPrimaryControlHighlight()};
// Fill the background first ...
g.setColor(this.getBackground());
if (isOpaque()) {
g.fillRect(0, 0, this.getWidth(),
this.getHeight());
}
// ... then draw the arrow.
if (getModel().isPressed()) {
// Adjust color mapping for pressed button state
colors[1] = colors[2];
}
if(orientation == JSplitPane.VERTICAL_SPLIT) {
// Draw the image for a vertical split
for (int i=1; i<=buffer[0].length; i++) {
for (int j=1; j<blockSize; j++) {
if (buffer[j-1][i-1] == 0) {
continue;
}
else {
g.setColor(
colors[buffer[j-1][i-1]]);
}
g.drawLine(i, j, i, j);
}
}
}
else {
// Draw the image for a horizontal split
// by simply swaping the i and j axis.
// Except the drawLine() call this code is
// identical to the code block above. This was done
// in order to remove the additional orientation
// check for each pixel.
for (int i=1; i<=buffer[0].length; i++) {
for (int j=1; j<blockSize; j++) {
if (buffer[j-1][i-1] == 0) {
// Nothing needs
// to be drawn
continue;
}
else {
// Set the color from the
// color map
g.setColor(
colors[buffer[j-1][i-1]]);
}
// Draw a pixel
g.drawLine(j, i, j, i);
}
}
}
}
}
// Don't want the button to participate in focus traversable.
public boolean isFocusTraversable() {
return false;
}
};
b.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
b.setFocusPainted(false);
b.setBorderPainted(false);
b.setRequestFocusEnabled(false);
maybeMakeButtonOpaque(b);
return b;
| javax.swing.JButton | getLeftButtonFromSuper()
return super.leftButton;
| int | getOneTouchOffsetFromSuper()
return super.ONE_TOUCH_OFFSET;
| int | getOneTouchSizeFromSuper()
return super.ONE_TOUCH_SIZE;
| int | getOrientationFromSuper()
return super.orientation;
| javax.swing.JButton | getRightButtonFromSuper()
return super.rightButton;
| javax.swing.JSplitPane | getSplitPaneFromSuper()
return super.splitPane;
| private void | maybeMakeButtonOpaque(javax.swing.JComponent c)If necessary c is made opaque.
Object opaque = UIManager.get("SplitPane.oneTouchButtonsOpaque");
if (opaque != null) {
c.setOpaque(((Boolean)opaque).booleanValue());
}
| public void | paint(java.awt.Graphics g)
MetalBumps usedBumps;
if (splitPane.hasFocus()) {
usedBumps = focusBumps;
g.setColor(primaryControlColor);
}
else {
usedBumps = bumps;
g.setColor(controlColor);
}
Rectangle clip = g.getClipBounds();
Insets insets = getInsets();
g.fillRect(clip.x, clip.y, clip.width, clip.height);
Dimension size = getSize();
size.width -= inset * 2;
size.height -= inset * 2;
int drawX = inset;
int drawY = inset;
if (insets != null) {
size.width -= (insets.left + insets.right);
size.height -= (insets.top + insets.bottom);
drawX += insets.left;
drawY += insets.top;
}
usedBumps.setBumpArea(size);
usedBumps.paintIcon(this, g, drawX, drawY);
super.paint(g);
|
|