package org.rr.jeborker.gui.cell; import java.awt.Color; import java.awt.Component; import java.awt.Insets; import java.util.List; import javax.swing.DefaultComboBoxModel; import javax.swing.Icon; import javax.swing.JComboBox; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; import javax.swing.table.TableCellRenderer; import org.rr.commons.swing.SwingUtils; import org.rr.commons.utils.ListUtils; import org.rr.commons.utils.StringUtil; import com.l2fprod.common.model.DefaultObjectRenderer; import com.l2fprod.common.model.ObjectRenderer; public class MultiListPropertyRenderer extends JComboBox implements TableCellRenderer { private static final String noChanges = "<" + Bundle.getString("ComboBoxPropertyEditor.noChanges") + ">"; private static final String clear = "<" + Bundle.getString("ComboBoxPropertyEditor.clear") + ">"; private ObjectRenderer objectRenderer = new DefaultObjectRenderer(); private DefaultComboBoxModel model = new DefaultComboBoxModel(); public MultiListPropertyRenderer() { this.setOpaque(true); this.setBackground(Color.RED); this.setEditable(true); this.setModel(model); ((JTextField)this.getEditor().getEditorComponent()).setBorder(new EmptyBorder(new Insets(0, 3, 0, 0))); } public void setValue(Object value) { if (value == null || value.toString().length() == 0) { setText(clear); } else if(value instanceof List) { Object o = ListUtils.first((List<?>)value); if(o == null) { //null value means no changes setText(noChanges); } else if(StringUtil.toString(o).isEmpty()) { //empty string is clear setText(clear); } else { setText(StringUtil.toString(o)); } } else { setText(clear); } } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setValue(value); SwingUtils.setColor(this, isSelected); return this; } protected String convertToString(Object value) { return objectRenderer.getText(value); } protected Icon convertToIcon(Object value) { return null; } private void setText(String text) { this.model.removeAllElements(); this.model.addElement(text); this.model.setSelectedItem(text); } }