Repaired GenericArrayEditor (merge from mk-branch, rev. 110)
This commit is contained in:
		@@ -5,6 +5,7 @@ package eva2;
 | 
			
		||||
 * 
 | 
			
		||||
 * --- Changelog
 | 
			
		||||
 * 
 | 
			
		||||
 * 			Repaired the GenericArrayEditor.
 | 
			
		||||
 * 2.026: Added DiversityTerminator and KnownOptimaTerminator, slightly changed InterfaceTerminator for these
 | 
			
		||||
 * 			and InterfaceStatistics to provide termination message to text window. 
 | 
			
		||||
 * 			Killed redundant method getGenerations() in Population. Population.getAllSolutions now returns a 
 | 
			
		||||
 
 | 
			
		||||
@@ -14,31 +14,40 @@ package eva2.gui;
 | 
			
		||||
 *==========================================================================*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import java.awt.*;
 | 
			
		||||
import java.awt.event.*;
 | 
			
		||||
import javax.swing.JPanel;
 | 
			
		||||
import java.awt.BorderLayout;
 | 
			
		||||
import java.awt.Component;
 | 
			
		||||
import java.awt.Dimension;
 | 
			
		||||
import java.awt.Font;
 | 
			
		||||
import java.awt.FontMetrics;
 | 
			
		||||
import java.awt.Graphics;
 | 
			
		||||
import java.awt.Insets;
 | 
			
		||||
import java.awt.Rectangle;
 | 
			
		||||
import java.awt.event.ActionEvent;
 | 
			
		||||
import java.awt.event.ActionListener;
 | 
			
		||||
import java.awt.event.WindowAdapter;
 | 
			
		||||
import java.awt.event.WindowEvent;
 | 
			
		||||
import java.beans.PropertyChangeEvent;
 | 
			
		||||
import java.beans.PropertyChangeListener;
 | 
			
		||||
import java.beans.PropertyChangeSupport;
 | 
			
		||||
import java.beans.PropertyEditor;
 | 
			
		||||
import java.lang.reflect.Array;
 | 
			
		||||
 | 
			
		||||
import javax.swing.DefaultListCellRenderer;
 | 
			
		||||
import javax.swing.DefaultListModel;
 | 
			
		||||
import javax.swing.JButton;
 | 
			
		||||
import javax.swing.JLabel;
 | 
			
		||||
import javax.swing.JList;
 | 
			
		||||
import javax.swing.JButton;
 | 
			
		||||
import javax.swing.JOptionPane;
 | 
			
		||||
import javax.swing.JPanel;
 | 
			
		||||
import javax.swing.JScrollPane;
 | 
			
		||||
import javax.swing.ListCellRenderer;
 | 
			
		||||
import javax.swing.SwingConstants;
 | 
			
		||||
import javax.swing.event.ListSelectionEvent;
 | 
			
		||||
import javax.swing.event.ListSelectionListener;
 | 
			
		||||
 | 
			
		||||
import javax.swing.ListCellRenderer;
 | 
			
		||||
import javax.swing.event.ListSelectionEvent;
 | 
			
		||||
import javax.swing.SwingConstants;
 | 
			
		||||
import javax.swing.JOptionPane;
 | 
			
		||||
import javax.swing.DefaultListModel;
 | 
			
		||||
import javax.swing.JScrollPane;
 | 
			
		||||
import javax.swing.DefaultListCellRenderer;
 | 
			
		||||
 | 
			
		||||
import eva2.server.go.problems.DiscType;
 | 
			
		||||
import eva2.tools.EVAHELP;
 | 
			
		||||
import eva2.tools.SelectedTag;
 | 
			
		||||
 | 
			
		||||
import java.beans.PropertyEditor;
 | 
			
		||||
import java.beans.PropertyChangeSupport;
 | 
			
		||||
import java.beans.PropertyChangeListener;
 | 
			
		||||
import java.beans.PropertyChangeEvent;
 | 
			
		||||
import java.beans.PropertyEditorManager;
 | 
			
		||||
import java.lang.reflect.Array;
 | 
			
		||||
/*==========================================================================*
 | 
			
		||||
 * CLASS DECLARATION
 | 
			
		||||
 *==========================================================================*/
 | 
			
		||||
@@ -74,6 +83,7 @@ implements PropertyEditor {
 | 
			
		||||
						if (m_ListModel.size() > current) {
 | 
			
		||||
							m_ElementList.setSelectedIndex(current);
 | 
			
		||||
						}
 | 
			
		||||
						m_ElementList.setModel(m_ListModel);
 | 
			
		||||
					}
 | 
			
		||||
					m_Support.firePropertyChange("", null, null);
 | 
			
		||||
				}
 | 
			
		||||
@@ -93,6 +103,7 @@ implements PropertyEditor {
 | 
			
		||||
					} else {
 | 
			
		||||
						m_ListModel.addElement(addObj);
 | 
			
		||||
					}
 | 
			
		||||
					m_ElementList.setModel(m_ListModel);
 | 
			
		||||
					m_Support.firePropertyChange("", null, null);
 | 
			
		||||
				} catch (Exception ex) {
 | 
			
		||||
					JOptionPane.showMessageDialog(GenericArrayEditor.this,"Could not create an object copy",null,JOptionPane.ERROR_MESSAGE);
 | 
			
		||||
@@ -109,9 +120,9 @@ implements PropertyEditor {
 | 
			
		||||
 | 
			
		||||
			if (e.getSource() == m_ElementList) {
 | 
			
		||||
				// Enable the delete button
 | 
			
		||||
				//System.out.println("m_ElementList.getSelectedIndex()"+m_ElementList.getSelectedIndex());
 | 
			
		||||
				if (m_ElementList.getSelectedIndex() != -1) {
 | 
			
		||||
					m_DeleteBut.setEnabled(true);
 | 
			
		||||
					m_ElementEditor.setValue(m_ElementList.getSelectedValue());
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -360,7 +371,7 @@ implements PropertyEditor {
 | 
			
		||||
		FontMetrics fm = gfx.getFontMetrics();
 | 
			
		||||
		int vpad = (box.height - fm.getAscent()) / 2;
 | 
			
		||||
//		System.out.println(m_ListModel + " --- " + m_ElementClass);
 | 
			
		||||
		String rep = m_ListModel.getSize() + " " + EVAHELP.cutClassName(m_ElementClass.getName());
 | 
			
		||||
		String rep = m_ListModel.getSize() + " of " + EVAHELP.cutClassName(m_ElementClass.getName());
 | 
			
		||||
		gfx.drawString(rep, 2, fm.getHeight() + vpad - 3  );
 | 
			
		||||
	}
 | 
			
		||||
	/**
 | 
			
		||||
@@ -412,11 +423,13 @@ implements PropertyEditor {
 | 
			
		||||
	public static void main(String [] args) {
 | 
			
		||||
		try {
 | 
			
		||||
			java.beans.PropertyEditorManager.registerEditor(SelectedTag.class,TagEditor.class);
 | 
			
		||||
			java.beans.PropertyEditorManager.registerEditor(String [].class,GenericArrayEditor.class);
 | 
			
		||||
			java.beans.PropertyEditorManager.registerEditor(int [].class,GenericArrayEditor.class);
 | 
			
		||||
			java.beans.PropertyEditorManager.registerEditor(double [].class,GenericArrayEditor.class);
 | 
			
		||||
			GenericArrayEditor editor = new GenericArrayEditor();
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			double [] initial = { 1, 2, 34,656,46	};
 | 
			
		||||
			DiscType[] initial = { new DiscType(3,4.), new DiscType(5, 7.)};
 | 
			
		||||
			editor.setValue(initial);
 | 
			
		||||
			PropertyDialog pd = new PropertyDialog(editor,EVAHELP.cutClassName(editor.getClass().getName())
 | 
			
		||||
					, 100, 100);
 | 
			
		||||
			pd.setSize(200,200);
 | 
			
		||||
 
 | 
			
		||||
@@ -452,8 +452,8 @@ public class GenericObjectEditor implements PropertyEditor {
 | 
			
		||||
//						setObject(dummy);
 | 
			
		||||
//					} else {
 | 
			
		||||
					if (TRACE) System.out.println(className);
 | 
			
		||||
					Object n = (Object)Class.forName(className, true, this.getClass().getClassLoader()).newInstance();
 | 
			
		||||
					n = (Object)Class.forName(className).newInstance();
 | 
			
		||||
//					Object n = (Object)Class.forName(className, true, this.getClass().getClassLoader()).newInstance();
 | 
			
		||||
					Object n = (Object)Class.forName(className).newInstance();
 | 
			
		||||
					setObject(n);
 | 
			
		||||
//					}
 | 
			
		||||
				} catch (Exception ex) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,40 +1,47 @@
 | 
			
		||||
package eva2.gui;
 | 
			
		||||
 | 
			
		||||
import java.awt.Color;
 | 
			
		||||
import java.beans.BeanInfo;
 | 
			
		||||
import java.beans.Introspector;
 | 
			
		||||
import java.beans.PropertyDescriptor;
 | 
			
		||||
import java.beans.PropertyEditor;
 | 
			
		||||
import java.beans.PropertyEditorManager;
 | 
			
		||||
 | 
			
		||||
import sun.beans.editors.BoolEditor;
 | 
			
		||||
import sun.beans.editors.ByteEditor;
 | 
			
		||||
import sun.beans.editors.ColorEditor;
 | 
			
		||||
import sun.beans.editors.DoubleEditor;
 | 
			
		||||
import sun.beans.editors.FloatEditor;
 | 
			
		||||
import sun.beans.editors.IntEditor;
 | 
			
		||||
import sun.beans.editors.LongEditor;
 | 
			
		||||
import sun.beans.editors.ShortEditor;
 | 
			
		||||
import sun.beans.editors.StringEditor;
 | 
			
		||||
import eva2.server.go.InterfaceTerminator;
 | 
			
		||||
import eva2.server.go.individuals.codings.gp.GPArea;
 | 
			
		||||
import eva2.tools.SelectedTag;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import sun.beans.editors.DoubleEditor;
 | 
			
		||||
import sun.beans.editors.IntEditor;
 | 
			
		||||
import sun.beans.editors.BoolEditor;
 | 
			
		||||
import sun.beans.editors.ByteEditor;
 | 
			
		||||
import sun.beans.editors.ColorEditor;	
 | 
			
		||||
import sun.beans.editors.ShortEditor;
 | 
			
		||||
import sun.beans.editors.FloatEditor;	
 | 
			
		||||
import sun.beans.editors.LongEditor;
 | 
			
		||||
import sun.beans.editors.StringEditor;
 | 
			
		||||
 | 
			
		||||
public class PropertyEditorProvider {
 | 
			
		||||
    final static boolean TRACE = false;
 | 
			
		||||
    // if true, we use the GenericObjectEditor whenever no specific one is registered, so keep it true
 | 
			
		||||
    // unless you want to register every single possibility.
 | 
			
		||||
    public static boolean useDefaultGOE = true; 
 | 
			
		||||
    
 | 
			
		||||
    public static PropertyEditor findEditor(Class cls) {
 | 
			
		||||
    /**
 | 
			
		||||
     * Retrieve an editor object for a given class.
 | 
			
		||||
     * This method seems unable to retrieve a primitive editor for obscure reasons.
 | 
			
		||||
     * So better use the one based on PropertyDescriptor if possible.
 | 
			
		||||
     */
 | 
			
		||||
    public static PropertyEditor findEditor(Class<?> cls) {
 | 
			
		||||
    	PropertyEditor  editor  = null;
 | 
			
		||||
        editor = PropertyEditorManager.findEditor(cls);
 | 
			
		||||
 | 
			
		||||
		if (TRACE)  System.out.println((editor == null ) ? "No editor from PEM" : ("Found " + editor.getClass()));
 | 
			
		||||
//		if (TRACE)  System.out.println((editor == null ) ? "No editor from PEM" : ("Found " + editor.getClass()));
 | 
			
		||||
        if ((editor == null) && useDefaultGOE ) {
 | 
			
		||||
        	editor = new GenericObjectEditor();
 | 
			
		||||
        	if (TRACE) System.out.println("using GOE");
 | 
			
		||||
        	if (cls.isArray()) editor = new GenericArrayEditor();
 | 
			
		||||
        	else editor = new GenericObjectEditor();
 | 
			
		||||
//        	if (TRACE) System.out.println("using GOE/GAE");
 | 
			
		||||
        }
 | 
			
		||||
        if (TRACE) System.out.println("# using "+ editor.getClass().getName() + " for " + cls.getName());
 | 
			
		||||
        return editor;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
@@ -111,8 +118,9 @@ public class PropertyEditorProvider {
 | 
			
		||||
	        if (editor == null) editor = PropertyEditorManager.findEditor(type);
 | 
			
		||||
	        if (TRACE)  System.out.println((editor == null ) ? "No editor from PEM by type" : ("Found " + editor.getClass()));
 | 
			
		||||
	        if ((editor == null) && useDefaultGOE ) {
 | 
			
		||||
	        	editor = new GenericObjectEditor();
 | 
			
		||||
	        	if (TRACE) System.out.println("using GOE");
 | 
			
		||||
	        	if (type.isArray()) editor = new GenericArrayEditor();
 | 
			
		||||
	        	else editor = new GenericObjectEditor();
 | 
			
		||||
	        	if (TRACE) System.out.println("using GOE/GAE");
 | 
			
		||||
	        }
 | 
			
		||||
	    }
 | 
			
		||||
	    if (editor == null) {
 | 
			
		||||
@@ -128,7 +136,7 @@ public class PropertyEditorProvider {
 | 
			
		||||
//	    	((GenericObjectEditor) editor).getCustomEditor();
 | 
			
		||||
	    	((GenericObjectEditor) editor).setClassType(type);
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
        if (TRACE) System.out.println("+ using "+ editor.getClass().getName() + " for " + value.getClass().getName());
 | 
			
		||||
	    return editor;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
@@ -136,6 +144,7 @@ public class PropertyEditorProvider {
 | 
			
		||||
     */
 | 
			
		||||
    public static void installEditors() {
 | 
			
		||||
        PropertyEditorManager.registerEditor(SelectedTag.class, TagEditor.class);
 | 
			
		||||
        PropertyEditorManager.registerEditor(int[].class, GenericArrayEditor.class);
 | 
			
		||||
        PropertyEditorManager.registerEditor(double[].class, GenericArrayEditor.class);
 | 
			
		||||
        PropertyEditorManager.registerEditor(InterfaceTerminator[].class, GenericArrayEditor.class);
 | 
			
		||||
        
 | 
			
		||||
 
 | 
			
		||||
@@ -519,7 +519,9 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
 | 
			
		||||
	                PropertyEditor  tmpEdit     = null;
 | 
			
		||||
	                Object          newValue    = evt.getNewValue();
 | 
			
		||||
	                if (newValue == null) newValue = editor.getValue();
 | 
			
		||||
	                tmpEdit = PropertyEditorProvider.findEditor(newValue.getClass());
 | 
			
		||||
	                // the findEditor method using properties may retrieve a primitive editor, the other one, for obscure reasons, cant.
 | 
			
		||||
	                // so Ill use the mightier first.
 | 
			
		||||
	                tmpEdit = PropertyEditorProvider.findEditor(m_Properties[i], newValue);
 | 
			
		||||
	                if (tmpEdit == null)    tmpEdit = PropertyEditorProvider.findEditor(m_Properties[i].getPropertyType());
 | 
			
		||||
	                if (tmpEdit.getClass() != m_Editors[i].getClass()) {
 | 
			
		||||
	                	value           = newValue;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user