Repaired GenericArrayEditor (merge from mk-branch, rev. 110)
This commit is contained in:
parent
34075b8c97
commit
8d14ff6c1b
@ -5,6 +5,7 @@ package eva2;
|
|||||||
*
|
*
|
||||||
* --- Changelog
|
* --- Changelog
|
||||||
*
|
*
|
||||||
|
* Repaired the GenericArrayEditor.
|
||||||
* 2.026: Added DiversityTerminator and KnownOptimaTerminator, slightly changed InterfaceTerminator for these
|
* 2.026: Added DiversityTerminator and KnownOptimaTerminator, slightly changed InterfaceTerminator for these
|
||||||
* and InterfaceStatistics to provide termination message to text window.
|
* and InterfaceStatistics to provide termination message to text window.
|
||||||
* Killed redundant method getGenerations() in Population. Population.getAllSolutions now returns a
|
* Killed redundant method getGenerations() in Population. Population.getAllSolutions now returns a
|
||||||
|
@ -14,31 +14,40 @@ package eva2.gui;
|
|||||||
*==========================================================================*/
|
*==========================================================================*/
|
||||||
|
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.event.*;
|
import java.awt.Component;
|
||||||
import javax.swing.JPanel;
|
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.JLabel;
|
||||||
import javax.swing.JList;
|
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.event.ListSelectionListener;
|
||||||
|
|
||||||
import javax.swing.ListCellRenderer;
|
import eva2.server.go.problems.DiscType;
|
||||||
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.tools.EVAHELP;
|
import eva2.tools.EVAHELP;
|
||||||
import eva2.tools.SelectedTag;
|
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
|
* CLASS DECLARATION
|
||||||
*==========================================================================*/
|
*==========================================================================*/
|
||||||
@ -74,6 +83,7 @@ implements PropertyEditor {
|
|||||||
if (m_ListModel.size() > current) {
|
if (m_ListModel.size() > current) {
|
||||||
m_ElementList.setSelectedIndex(current);
|
m_ElementList.setSelectedIndex(current);
|
||||||
}
|
}
|
||||||
|
m_ElementList.setModel(m_ListModel);
|
||||||
}
|
}
|
||||||
m_Support.firePropertyChange("", null, null);
|
m_Support.firePropertyChange("", null, null);
|
||||||
}
|
}
|
||||||
@ -93,6 +103,7 @@ implements PropertyEditor {
|
|||||||
} else {
|
} else {
|
||||||
m_ListModel.addElement(addObj);
|
m_ListModel.addElement(addObj);
|
||||||
}
|
}
|
||||||
|
m_ElementList.setModel(m_ListModel);
|
||||||
m_Support.firePropertyChange("", null, null);
|
m_Support.firePropertyChange("", null, null);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
JOptionPane.showMessageDialog(GenericArrayEditor.this,"Could not create an object copy",null,JOptionPane.ERROR_MESSAGE);
|
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) {
|
if (e.getSource() == m_ElementList) {
|
||||||
// Enable the delete button
|
// Enable the delete button
|
||||||
//System.out.println("m_ElementList.getSelectedIndex()"+m_ElementList.getSelectedIndex());
|
|
||||||
if (m_ElementList.getSelectedIndex() != -1) {
|
if (m_ElementList.getSelectedIndex() != -1) {
|
||||||
m_DeleteBut.setEnabled(true);
|
m_DeleteBut.setEnabled(true);
|
||||||
|
m_ElementEditor.setValue(m_ElementList.getSelectedValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -360,7 +371,7 @@ implements PropertyEditor {
|
|||||||
FontMetrics fm = gfx.getFontMetrics();
|
FontMetrics fm = gfx.getFontMetrics();
|
||||||
int vpad = (box.height - fm.getAscent()) / 2;
|
int vpad = (box.height - fm.getAscent()) / 2;
|
||||||
// System.out.println(m_ListModel + " --- " + m_ElementClass);
|
// 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 );
|
gfx.drawString(rep, 2, fm.getHeight() + vpad - 3 );
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -412,11 +423,13 @@ implements PropertyEditor {
|
|||||||
public static void main(String [] args) {
|
public static void main(String [] args) {
|
||||||
try {
|
try {
|
||||||
java.beans.PropertyEditorManager.registerEditor(SelectedTag.class,TagEditor.class);
|
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);
|
java.beans.PropertyEditorManager.registerEditor(double [].class,GenericArrayEditor.class);
|
||||||
GenericArrayEditor editor = new GenericArrayEditor();
|
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())
|
PropertyDialog pd = new PropertyDialog(editor,EVAHELP.cutClassName(editor.getClass().getName())
|
||||||
, 100, 100);
|
, 100, 100);
|
||||||
pd.setSize(200,200);
|
pd.setSize(200,200);
|
||||||
|
@ -452,8 +452,8 @@ public class GenericObjectEditor implements PropertyEditor {
|
|||||||
// setObject(dummy);
|
// setObject(dummy);
|
||||||
// } else {
|
// } else {
|
||||||
if (TRACE) System.out.println(className);
|
if (TRACE) System.out.println(className);
|
||||||
Object n = (Object)Class.forName(className, true, this.getClass().getClassLoader()).newInstance();
|
// Object n = (Object)Class.forName(className, true, this.getClass().getClassLoader()).newInstance();
|
||||||
n = (Object)Class.forName(className).newInstance();
|
Object n = (Object)Class.forName(className).newInstance();
|
||||||
setObject(n);
|
setObject(n);
|
||||||
// }
|
// }
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
package eva2.gui;
|
package eva2.gui;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.beans.BeanInfo;
|
||||||
|
import java.beans.Introspector;
|
||||||
import java.beans.PropertyDescriptor;
|
import java.beans.PropertyDescriptor;
|
||||||
import java.beans.PropertyEditor;
|
import java.beans.PropertyEditor;
|
||||||
import java.beans.PropertyEditorManager;
|
import java.beans.PropertyEditorManager;
|
||||||
|
|
||||||
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.BoolEditor;
|
||||||
import sun.beans.editors.ByteEditor;
|
import sun.beans.editors.ByteEditor;
|
||||||
import sun.beans.editors.ColorEditor;
|
import sun.beans.editors.ColorEditor;
|
||||||
import sun.beans.editors.ShortEditor;
|
import sun.beans.editors.DoubleEditor;
|
||||||
import sun.beans.editors.FloatEditor;
|
import sun.beans.editors.FloatEditor;
|
||||||
|
import sun.beans.editors.IntEditor;
|
||||||
import sun.beans.editors.LongEditor;
|
import sun.beans.editors.LongEditor;
|
||||||
|
import sun.beans.editors.ShortEditor;
|
||||||
import sun.beans.editors.StringEditor;
|
import sun.beans.editors.StringEditor;
|
||||||
|
import eva2.server.go.InterfaceTerminator;
|
||||||
|
import eva2.server.go.individuals.codings.gp.GPArea;
|
||||||
|
import eva2.tools.SelectedTag;
|
||||||
|
|
||||||
public class PropertyEditorProvider {
|
public class PropertyEditorProvider {
|
||||||
final static boolean TRACE = false;
|
final static boolean TRACE = false;
|
||||||
@ -26,15 +26,22 @@ public class PropertyEditorProvider {
|
|||||||
// unless you want to register every single possibility.
|
// unless you want to register every single possibility.
|
||||||
public static boolean useDefaultGOE = true;
|
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;
|
PropertyEditor editor = null;
|
||||||
editor = PropertyEditorManager.findEditor(cls);
|
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 ) {
|
if ((editor == null) && useDefaultGOE ) {
|
||||||
editor = new GenericObjectEditor();
|
if (cls.isArray()) editor = new GenericArrayEditor();
|
||||||
if (TRACE) System.out.println("using GOE");
|
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;
|
return editor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,8 +118,9 @@ public class PropertyEditorProvider {
|
|||||||
if (editor == null) editor = PropertyEditorManager.findEditor(type);
|
if (editor == null) editor = PropertyEditorManager.findEditor(type);
|
||||||
if (TRACE) System.out.println((editor == null ) ? "No editor from PEM by type" : ("Found " + editor.getClass()));
|
if (TRACE) System.out.println((editor == null ) ? "No editor from PEM by type" : ("Found " + editor.getClass()));
|
||||||
if ((editor == null) && useDefaultGOE ) {
|
if ((editor == null) && useDefaultGOE ) {
|
||||||
editor = new GenericObjectEditor();
|
if (type.isArray()) editor = new GenericArrayEditor();
|
||||||
if (TRACE) System.out.println("using GOE");
|
else editor = new GenericObjectEditor();
|
||||||
|
if (TRACE) System.out.println("using GOE/GAE");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (editor == null) {
|
if (editor == null) {
|
||||||
@ -128,7 +136,7 @@ public class PropertyEditorProvider {
|
|||||||
// ((GenericObjectEditor) editor).getCustomEditor();
|
// ((GenericObjectEditor) editor).getCustomEditor();
|
||||||
((GenericObjectEditor) editor).setClassType(type);
|
((GenericObjectEditor) editor).setClassType(type);
|
||||||
}
|
}
|
||||||
|
if (TRACE) System.out.println("+ using "+ editor.getClass().getName() + " for " + value.getClass().getName());
|
||||||
return editor;
|
return editor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,6 +144,7 @@ public class PropertyEditorProvider {
|
|||||||
*/
|
*/
|
||||||
public static void installEditors() {
|
public static void installEditors() {
|
||||||
PropertyEditorManager.registerEditor(SelectedTag.class, TagEditor.class);
|
PropertyEditorManager.registerEditor(SelectedTag.class, TagEditor.class);
|
||||||
|
PropertyEditorManager.registerEditor(int[].class, GenericArrayEditor.class);
|
||||||
PropertyEditorManager.registerEditor(double[].class, GenericArrayEditor.class);
|
PropertyEditorManager.registerEditor(double[].class, GenericArrayEditor.class);
|
||||||
PropertyEditorManager.registerEditor(InterfaceTerminator[].class, GenericArrayEditor.class);
|
PropertyEditorManager.registerEditor(InterfaceTerminator[].class, GenericArrayEditor.class);
|
||||||
|
|
||||||
|
@ -519,7 +519,9 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
|||||||
PropertyEditor tmpEdit = null;
|
PropertyEditor tmpEdit = null;
|
||||||
Object newValue = evt.getNewValue();
|
Object newValue = evt.getNewValue();
|
||||||
if (newValue == null) newValue = editor.getValue();
|
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 == null) tmpEdit = PropertyEditorProvider.findEditor(m_Properties[i].getPropertyType());
|
||||||
if (tmpEdit.getClass() != m_Editors[i].getClass()) {
|
if (tmpEdit.getClass() != m_Editors[i].getClass()) {
|
||||||
value = newValue;
|
value = newValue;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user