SortButtonRenderer.java
| Index Score | ||
|---|---|---|
![]() |
![]() |
xnap.gui.table |
![]() |
![]() |
XNap |
View: Reasons, Metrics, Source Code
These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.
package xnap.gui.table;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import xnap.util.Preferences;
/**
* @version 1.0 02/25/99
*/
public class SortButtonRenderer extends JButton implements TableCellRenderer,
PropertyChangeListener {
public static final int NONE = 0;
public static final int DOWN = 1;
public static final int UP = 2;
int pushedColumn;
Hashtable state;
JButton downButton;
JButton upButton;
public SortButtonRenderer() {
pushedColumn = -1;
state = new Hashtable();
setMargin(new Insets(0,0,0,0));
setHorizontalTextPosition(LEFT);
setIcon(new BlankIcon());
// perplexed
// ArrowIcon(SwingConstants.SOUTH, true)
// BevelArrowIcon (int direction, boolean isRaisedView, boolean isPressedView)
initButtons();
}
/**
* This control has to listen for LookAndFeel changes so that it can
* create the up and down buttons using the UIManager's color set.
*
* [FIX] Find a way to have this updated when XNapFrame calls
* SwingUtilities.updateComponentTreeUI(frame). Having an extra listener
* is a really crappy way to handle this, but it works for now.
*/
public void propertyChange(PropertyChangeEvent e) {
String p = e.getPropertyName();
if (e.getSource() == Preferences.getInstance()) {
if (e.getPropertyName().equals("lookAndFeel")) {
initButtons(); // re-create buttons using new colors, etc...
updateUI();
}
}
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
JButton button = this;
Object obj = state.get(new Integer(column));
if (obj != null) {
if (((Integer)obj).intValue() == DOWN) {
button = downButton;
} else {
button = upButton;
}
}
button.setText((value == null) ? "" : value.toString());
boolean isPressed = (column == pushedColumn);
button.getModel().setPressed(isPressed);
button.getModel().setArmed(isPressed);
return button;
}
public void setPressedColumn(int col) {
pushedColumn = col;
}
public void setSelectedColumn(int col) {
if (col < 0) return;
Integer value = null;
Object obj = state.get(new Integer(col));
if (obj == null) {
value = new Integer(UP);
} else {
if (((Integer)obj).intValue() == DOWN) {
// switch it to UP
value = new Integer(UP);
} else {
// switch it to DOWN
value = new Integer(DOWN);
}
}
state.clear();
state.put(new Integer(col), value);
}
public int getState(int col) {
int retValue;
Object obj = state.get(new Integer(col));
if (obj == null) {
retValue = NONE;
} else {
if (((Integer)obj).intValue() == DOWN) {
retValue = UP;
} else {
retValue = DOWN;
}
}
return retValue;
}
private void initButtons() {
downButton = new JButton();
downButton.setMargin(new Insets(0,0,0,0));
downButton.setHorizontalTextPosition(LEFT);
downButton.setIcon(
new BevelArrowIcon(BevelArrowIcon.DOWN, false, false));
downButton.setPressedIcon(
new BevelArrowIcon(BevelArrowIcon.DOWN, false, true));
upButton = new JButton();
upButton.setMargin(new Insets(0,0,0,0));
upButton.setHorizontalTextPosition(LEFT);
upButton.setIcon(
new BevelArrowIcon(BevelArrowIcon.UP, false, false));
upButton.setPressedIcon(
new BevelArrowIcon(BevelArrowIcon.UP, false, true));
}
}
/**
* @version 1.0 02/26/99
*/
class BlankIcon implements Icon {
private Color fillColor;
private int size;
public BlankIcon() {
this(null, 11);
}
public BlankIcon(Color color, int size) {
//UIManager.getColor("control")
//UIManager.getColor("controlShadow")
fillColor = color;
this.size = size;
}
public void paintIcon(Component c, Graphics g, int x, int y) {
if (fillColor != null) {
g.setColor(fillColor);
g.drawRect(x, y, size-1, size-1);
}
}
public int getIconWidth() {
return size;
}
public int getIconHeight() {
return size;
}
}
/**
* @version 1.0 02/26/99
*/
class BevelArrowIcon implements Icon {
public static final int UP = 0; // direction
public static final int DOWN = 1;
private static final int DEFAULT_SIZE = 11;
private Color edge1;
private Color edge2;
private Color fill;
private int size;
private int direction;
public BevelArrowIcon(int direction, boolean isRaisedView,
boolean isPressedView) {
if (isRaisedView) {
if (isPressedView) {
init( UIManager.getColor("controlLtHighlight"),
UIManager.getColor("controlDkShadow"),
UIManager.getColor("controlShadow"),
DEFAULT_SIZE, direction);
} else {
init( UIManager.getColor("controlHighlight"),
UIManager.getColor("controlShadow"),
UIManager.getColor("control"),
DEFAULT_SIZE, direction);
}
} else {
if (isPressedView) {
init( UIManager.getColor("controlDkShadow"),
UIManager.getColor("controlLtHighlight"),
UIManager.getColor("controlShadow"),
DEFAULT_SIZE, direction);
} else {
init( UIManager.getColor("controlShadow"),
UIManager.getColor("controlHighlight"),
UIManager.getColor("control"),
DEFAULT_SIZE, direction);
}
}
}
public BevelArrowIcon(Color edge1, Color edge2, Color fill,
int size, int direction) {
init(edge1, edge2, fill, size, direction);
}
public void paintIcon(Component c, Graphics g, int x, int y) {
switch (direction) {
case DOWN:
drawDownArrow(g, x, y);
break;
case UP:
drawUpArrow(g, x, y);
break;
}
}
public int getIconWidth() {
return size;
}
public int getIconHeight() {
return size;
}
private void init(Color edge1, Color edge2, Color fill,
int size, int direction) {
this.edge1 = edge1;
this.edge2 = edge2;
this.fill = fill;
this.size = size;
this.direction = direction;
}
private void drawDownArrow(Graphics g, int xo, int yo) {
g.setColor(edge1);
g.drawLine(xo, yo, xo+size-1, yo);
g.drawLine(xo, yo+1, xo+size-3, yo+1);
g.setColor(edge2);
g.drawLine(xo+size-2, yo+1, xo+size-1, yo+1);
int x = xo+1;
int y = yo+2;
int dx = size-6;
while (y+1 < yo+size) {
g.setColor(edge1);
g.drawLine(x, y, x+1, y);
g.drawLine(x, y+1, x+1, y+1);
if (0 < dx) {
g.setColor(fill);
g.drawLine(x+2, y, x+1+dx, y);
g.drawLine(x+2, y+1, x+1+dx, y+1);
}
g.setColor(edge2);
g.drawLine(x+dx+2, y, x+dx+3, y);
g.drawLine(x+dx+2, y+1, x+dx+3, y+1);
x += 1;
y += 2;
dx -= 2;
}
g.setColor(edge1);
g.drawLine(xo+(size/2), yo+size-1, xo+(size/2), yo+size-1);
}
private void drawUpArrow(Graphics g, int xo, int yo) {
g.setColor(edge1);
int x = xo+(size/2);
g.drawLine(x, yo, x, yo);
x--;
int y = yo+1;
int dx = 0;
while (y+3 < yo+size) {
g.setColor(edge1);
g.drawLine(x, y, x+1, y);
g.drawLine(x, y+1, x+1, y+1);
if (0 < dx) {
g.setColor(fill);
g.drawLine(x+2, y, x+1+dx, y);
g.drawLine(x+2, y+1, x+1+dx, y+1);
}
g.setColor(edge2);
g.drawLine(x+dx+2, y, x+dx+3, y);
g.drawLine(x+dx+2, y+1, x+dx+3, y+1);
x -= 1;
y += 2;
dx += 2;
}
g.setColor(edge1);
g.drawLine(xo, yo+size-3, xo+1, yo+size-3);
g.setColor(edge2);
g.drawLine(xo+2, yo+size-2, xo+size-1, yo+size-2);
g.drawLine(xo, yo+size-1, xo+size, yo+size-1);
}
}
The table below shows all metrics for SortButtonRenderer.java.




