001package com.ganteater.ae.desktop.ui; 002 003import java.awt.Component; 004import java.awt.event.ActionEvent; 005import java.awt.event.ActionListener; 006import java.io.Serializable; 007import java.util.ArrayList; 008import java.util.List; 009import java.util.Map; 010 011import javax.swing.AbstractCellEditor; 012import javax.swing.JComboBox; 013import javax.swing.JTable; 014import javax.swing.JTextField; 015import javax.swing.table.TableCellEditor; 016 017import org.apache.commons.lang.StringUtils; 018 019public class ArrayCellEditor extends AbstractCellEditor implements TableCellEditor, ActionListener { 020 021 private static final long serialVersionUID = 1L; 022 023 private Serializable data = new ArrayList<>(); 024 025 public ArrayCellEditor(AEFrame frame) { 026 } 027 028 @Override 029 public Object getCellEditorValue() { 030 return data; 031 } 032 033 @Override 034 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 035 data = (Serializable) value; 036 if (value instanceof List) { 037 JComboBox<String> combo = new JComboBox<>(); 038 @SuppressWarnings("unchecked") 039 List<String> values = (List<String>) value; 040 for (String str : values) { 041 combo.addItem(str); 042 } 043 combo.addActionListener(this); 044 return combo; 045 046 } else if (value instanceof Map) { 047 return new JTextField(value.toString()); 048 } 049 050 return new JTextField((String) data); 051 } 052 053 @SuppressWarnings("unchecked") 054 @Override 055 public void actionPerformed(ActionEvent event) { 056 JComboBox<String> value = (JComboBox<String>) event.getSource(); 057 String selected = (String) value.getSelectedItem(); 058 059 int itemCount = value.getItemCount(); 060 data = new ArrayList<>(); 061 ((List<String>) data).add(selected); 062 for (int i = 0; i < itemCount; i++) { 063 String itemAt = value.getItemAt(i); 064 if (!StringUtils.equals(selected, itemAt)) { 065 ((List<String>) data).add(itemAt); 066 } 067 } 068 069 } 070 071}