Listing of Source client/RCONSOLE_COLORCHOOSER.javapackage cuserwin2;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JColorChooser;
import javax.swing.colorchooser.ColorSelectionModel;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import se.entra.phantom.client.PJUserWindow;
import se.entra.phantom.client.CUserWindow;
import se.entra.phantom.client.AEvent;
import se.entra.phantom.common.Transaction;
import se.entra.phantom.common.NetPhantomConstants;
/**
* This user window let the user select color from a color scheme. The window is
* based on the swing class JColorChooser.
*/
@SuppressWarnings("serial")
public class RCONSOLE_COLORCHOOSER extends PJUserWindow implements ChangeListener
{
/**
* The color chooser.
*/
private final JColorChooser colorChooser = new JColorChooser();
/**
* Currently selected/created color.
*/
private Color currentColor;
/**
* The base user window control.
*/
private CUserWindow uw;
///
/**
* Creates the user window that let user select RGB color.
*/
public RCONSOLE_COLORCHOOSER(CUserWindow uw,byte [] data)
{
super(uw,data);
this.uw=uw;
}
/**
* Create/initiate color chooser from transaction.
*/
@Override
public void create(Transaction trans)
{
// Layout color chooser.
setLayout(new BorderLayout());
add(BorderLayout.CENTER,colorChooser);
// Set current color from transaction.
setColor(trans);
// Get notifications when user selects new color.
ColorSelectionModel defaultModel=colorChooser.getSelectionModel();
defaultModel.addChangeListener(this);
}
/**
* Update color chooser from transaction.
*/
@Override
public void update(Transaction trans)
{
// Set current color from transaction.
setColor(trans);
}
/**
* Notify server of selected color (if changed).
*/
@Override
public void issueUpdate(Transaction trans)
{
// Notify server of new selection.
Color color=colorChooser.getColor();
if ( !color.equals(currentColor) )
{
currentColor=color;
trans.appendString(Integer.toString(color.getRGB()));
}
}
/**
* Set color from RGB create/update transaction.
*/
private void setColor(Transaction trans)
{
// Create new color from RGB string value
currentColor=new Color(Integer.parseInt(trans.readString()));
colorChooser.setColor(currentColor);
}
/**
* We can handle focus.
*/
@Override
public boolean isFocusTraversable()
{
return true;
}
// PropertyChangeListener interface
/**
* Get a notification when a colorChooser property has changed.
*/
public void stateChanged(ChangeEvent e)
{
Color color=colorChooser.getColor();
if ( !color.equals(currentColor) )
{
// Notify server.
AEvent.sendUserWindowEvent(uw,NetPhantomConstants.EVENT_SELECT,false,true,null);
}
}
}