package DisplayProject.swingdisplayer;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.EventObject;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTable;
@SuppressWarnings("serial")
public class BooleanDisplayer extends PropertyDisplayer {
private PropertyDescriptor descriptor;
private Method readMethod;
private Method writeMethod;
private Component owningComponent;
private JComboBox editorComponent;
public void setEditingInformation(Component c, PropertyDescriptor pd) {
this.owningComponent = c;
this.descriptor = pd;
this.writeMethod = descriptor.getWriteMethod();
this.readMethod = descriptor.getReadMethod();
}
public Object getCellEditorValue() {
if (editorComponent != null) {
return editorComponent.getSelectedItem();
}
return null;
}
public boolean isCellEditable() {
if (descriptor != null && descriptor.getPropertyType().equals(Boolean.TYPE) && writeMethod != null && readMethod != null) {
return true;
}
return false;
}
public boolean isCellEditable(EventObject anEvent) {
return isCellEditable();
}
public boolean shouldSelectCell(EventObject anEvent) {
if (anEvent instanceof MouseEvent) {
MouseEvent e = (MouseEvent)anEvent;
return e.getID() != MouseEvent.MOUSE_DRAGGED;
}
return true;
}
public Component getTableCellEditorComponent(JTable table,
Object value, boolean is1Selected, int row, int column) {
if (descriptor != null && descriptor.getWriteMethod() != null) {
final JComboBox aBox = new JComboBox(new Object[] {"true", "false"});
aBox.setBorder(null);
aBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (descriptor != null) {
try {
writeMethod.invoke(owningComponent, Boolean.valueOf(aBox.getSelectedIndex() == 0));
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
});
aBox.setSelectedIndex(value instanceof Boolean && ((Boolean)value).booleanValue() ? 0 : 1);
//editorComponent = aBox;
return aBox;
}
return null;
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, boolean isReadOnly, Component component, int row,
int column) {
JLabel result = new JLabel(String.valueOf(value));
result.setOpaque(true);
return result;
}
}