* appropriate element will be displayed, or an empty combobox. Otherwise the passed
* value will be displayed within the combobox.
*/
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col)
{
AutoResizingComboBox aComboBox = null;
try {
aComboBox = (AutoResizingComboBox)this.comboBox.getClass().newInstance();
}
catch (InstantiationException e) {
aComboBox = new AutoResizingComboBox();
}
catch (IllegalAccessException e) {
aComboBox = new AutoResizingComboBox();
}
ArrayFieldCellHelper.setUpCellRenderer(this.comboBox, aComboBox); // CraigM: 28/03/2008
// TF:12/11/07:Added the sizing in of a combo box.
aComboBox.setSize(this.comboBox.getWidth(), this.comboBox.getHeight());
if (GridCell.get(this.comboBox).getWidthPolicy() == Constants.SP_EXPLICIT) {
aComboBox.setPreferredSize(new Dimension(this.comboBox.getWidth(), this.comboBox.getHeight()));
}
// CraigM:06/11/2008 - If sized natural, size to minimum (this is calculated based on the contents of the list)
else if (GridCell.get(this.comboBox).getWidthPolicy() == Constants.SP_NATURAL) {
aComboBox.setPreferredSize(this.comboBox.getMinimumSize());
}
else {
aComboBox.setPreferredSize(this.comboBox.getPreferredSize());
}
aComboBox.setMinimumSize(aComboBox.getPreferredSize());
aComboBox.setName(table.getName() + "." + row + "." + col);
Array_Of_ListElement<ListElement> elements = null;
if (rowElements != null){
//PM:10/8/07
/*
* customize the element list per row, if there is
* no customisation for the row
* use the default
*/
elements = (Array_Of_ListElement<ListElement>)rowElements.get(row);
}
if (elements == null){
//PM:17/7/07 add a DropListModel with the correct data
elements =((DropListModel)this.comboBox.getModel()).getElementList();
}
aComboBox.setModel(new DropListModel(elements, aComboBox));
// TF:17/07/07: Added check to ensure it's editable
aComboBox.setEditable(this.comboBox.isEditable());
if (isSelected)
{
aComboBox.setForeground(table.getSelectionForeground());
aComboBox.setBackground(table.getSelectionBackground());
}
else
{
// TF:19/01/2010:DET-140:We want the background colour to be the colour of the template.
// aComboBox.setForeground(this.defaultforeground);
// aComboBox.setBackground(this.defaultBackground);
aComboBox.setForeground(this.comboBox.getForeground());
aComboBox.setBackground(this.comboBox.getBackground());
}
if (value != null)
{
if (value instanceof Number || value instanceof IntegerData)
{
// Scan through the list to find a match for this number
int num;
if (value instanceof Number) {
num = ((Number)value).intValue();
}
else {
IntegerData anInt = (IntegerData)value;
if (anInt.isNull()) {
return aComboBox;
}
else {
num = anInt.intValue();
}
}
aComboBox.setSelectedItem(null);
int limit = aComboBox.getModel().getSize(); // KM changed this.comboBox to aComboBox
for (int i = 0; i < limit; i++) {
Object o = aComboBox.getModel().getElementAt(i); // KM changed this.comboBox to aComboBox
if (o instanceof ListElement) {
if (((ListElement)o).getIntegerValue() == num)
{
//PM:9/8/07 selecting the correct value
aComboBox.setSelectedIndex(i);
return aComboBox;
}
}
}
// TF:04/09/2009:Changed this to be aComboBox. See JIRA DET-114
if (aComboBox.getModel().getSize() > 0)
{
//PM:17/7/07 added test to cater for FillInField
//Do not select the value if the item does not exist
if (!aComboBox.isEditable()){
// aComboBox.addItem(comboBox.getModel().getElementAt(0));
aComboBox.setSelectedIndex(0);
} else {
aComboBox.getEditor().setItem(value);
}
}
}
//PM:17/8/07 handle text correctly
else if (value instanceof String || value instanceof TextData){
aComboBox.setSelectedItem(null);
int limit = aComboBox.getModel().getSize(); // KM changed this.comboBox to aComboBox
for (int i = 0; i < limit; i++) {
Object o = aComboBox.getModel().getElementAt(i); // KM changed this.comboBox to aComboBox
if (o instanceof ListElement) {
if (((ListElement)o).getTextValue().toString().equalsIgnoreCase(value.toString()))
{
aComboBox.setSelectedIndex(i);
return aComboBox;
}
}
}
// TF:04/09/2009:Changed this to be aComboBox. See JIRA DET-114
if (aComboBox.getModel().getSize() > 0)
{
if (!aComboBox.isEditable()){
aComboBox.setSelectedIndex(0);
} else {
aComboBox.getEditor().setItem(value);
}
}
}
else
{
//PM:17/7/07 added test to cater for FillInField
//Do not select the value if the item does not exist
if (!aComboBox.isEditable()){
//TF:17/07/07 We cannot add a value easily, just assume it's in the list
// aComboBox.addItem(value);
aComboBox.setSelectedItem(value);
} else {
aComboBox.getEditor().setItem(value);
}
}
}
return aComboBox;