Properly show ToolTipText on the PropertySheetPanel.
Fix missing HTML for OptimizationParameters. Clean up PropertySheetPanel.
This commit is contained in:
parent
b13e81e59c
commit
2593ec2a70
@ -7,9 +7,11 @@ import eva2.tools.SelectedTag;
|
||||
import eva2.tools.StringTools;
|
||||
import eva2.tools.Tag;
|
||||
import eva2.util.annotation.Description;
|
||||
import eva2.util.annotation.Parameter;
|
||||
|
||||
import java.beans.*;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -994,6 +996,16 @@ public class BeanInspector {
|
||||
String result = "";
|
||||
String tipName = name + "TipText";
|
||||
|
||||
// Find by annotation
|
||||
Parameter[] parameters= target.getClass().getAnnotationsByType(Parameter.class);
|
||||
for (Field field : target.getClass().getDeclaredFields()) {
|
||||
if (field.isAnnotationPresent(Parameter.class) && field.getName().equals(name)) {
|
||||
Parameter parameter = field.getAnnotation(Parameter.class);
|
||||
return parameter.description();
|
||||
}
|
||||
}
|
||||
|
||||
// Find by deprecated TipText method
|
||||
for (int j = 0; j < methods.length; j++) {
|
||||
String mname = methods[j].getDisplayName();
|
||||
Method meth = methods[j].getMethod();
|
||||
|
@ -1,14 +1,11 @@
|
||||
package eva2.gui;
|
||||
|
||||
import eva2.EvAInfo;
|
||||
import eva2.optimization.modules.*;
|
||||
import eva2.util.ClassPreloader;
|
||||
import eva2.util.EvAComAdapter;
|
||||
import eva2.optimization.OptimizationStateListener;
|
||||
import eva2.optimization.go.InterfaceOptimizationParameters;
|
||||
import eva2.optimization.modules.AbstractModuleAdapter;
|
||||
import eva2.optimization.modules.GenericModuleAdapter;
|
||||
import eva2.optimization.modules.ModuleAdapter;
|
||||
import eva2.optimization.modules.OptimizationParameters;
|
||||
import eva2.optimization.stat.AbstractStatistics;
|
||||
import eva2.optimization.stat.InterfaceStatisticsListener;
|
||||
import eva2.optimization.stat.InterfaceStatisticsParameter;
|
||||
@ -772,7 +769,8 @@ public class Main extends JFrame implements OptimizationStateListener {
|
||||
ModuleAdapter newModuleAdapter = null;
|
||||
//
|
||||
try {
|
||||
newModuleAdapter = comAdapter.getModuleAdapter(selectedModule, optimizationParameters, withGUI ? null : "EvA2");
|
||||
newModuleAdapter = new GOModuleAdapter(selectedModule, OptimizationParameters.getInstance(), withGUI ? null : "EvA2");
|
||||
//newModuleAdapter = comAdapter.getModuleAdapter(selectedModule, optimizationParameters, withGUI ? null : "EvA2");
|
||||
} catch (Exception e) {
|
||||
LOGGER.log(Level.SEVERE, "Error loading module.", e);
|
||||
EVAERROR.EXIT("Error while comAdapter.GetModuleAdapter Host: " + e.getMessage());
|
||||
|
@ -8,9 +8,11 @@ import javax.swing.*;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.TableCellEditor;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import javax.swing.table.TableModel;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.beans.*;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
@ -82,7 +84,7 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
||||
*/
|
||||
// If true, tool tips are used up to the first point only.
|
||||
boolean stripToolTipToFirstPoint = false;
|
||||
private JTable propertyTable;
|
||||
private ToolTipTable propertyTable;
|
||||
private DefaultTableModel propertyTableModel;
|
||||
|
||||
/**
|
||||
@ -155,6 +157,38 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
||||
return view;
|
||||
}
|
||||
|
||||
/**
|
||||
* JTable extended to show ToolTips
|
||||
*/
|
||||
class ToolTipTable extends JTable {
|
||||
private String[] toolTips;
|
||||
|
||||
public ToolTipTable(TableModel model) {
|
||||
super(model);
|
||||
}
|
||||
|
||||
public void setToolTips(String[] toolTips) {
|
||||
this.toolTips = toolTips;
|
||||
}
|
||||
|
||||
//Implement table cell tool tips.
|
||||
public String getToolTipText(MouseEvent e) {
|
||||
String tip = null;
|
||||
java.awt.Point p = e.getPoint();
|
||||
int rowIndex = rowAtPoint(p);
|
||||
|
||||
try {
|
||||
if(this.toolTips != null && rowIndex <= this.toolTips.length){
|
||||
tip = this.toolTips[rowIndex];
|
||||
}
|
||||
} catch (RuntimeException e1) {
|
||||
//catch null pointer exception if mouse is over an empty line
|
||||
}
|
||||
|
||||
return tip;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a new target object for customisation.
|
||||
*
|
||||
@ -164,7 +198,7 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
||||
propertyTableModel = new DefaultTableModel();
|
||||
propertyTableModel.addColumn("Key");
|
||||
propertyTableModel.addColumn("Value");
|
||||
propertyTable = new JTable(propertyTableModel);
|
||||
propertyTable = new ToolTipTable(propertyTableModel);
|
||||
propertyTable.setDefaultRenderer(Object.class, new PropertyCellRenderer());
|
||||
propertyTable.setDefaultEditor(Object.class, new PropertyCellEditor());
|
||||
propertyTable.setRowHeight(20);
|
||||
@ -237,7 +271,7 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
||||
propertyLabels = new JLabel[propertyDescriptors.length];
|
||||
toolTips = new String[propertyDescriptors.length];
|
||||
|
||||
|
||||
int itemIndex = 0;
|
||||
for (int i = 0; i < propertyDescriptors.length; i++) {
|
||||
// For each property do this
|
||||
// Don't display hidden or expert properties.
|
||||
@ -253,8 +287,9 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
||||
if (propertyEditors[i] == null) {
|
||||
continue;
|
||||
}
|
||||
toolTips[i] = BeanInspector.getToolTipText(name, methodDescriptors, targetObject, stripToolTipToFirstPoint, tipTextLineLen);
|
||||
|
||||
toolTips[itemIndex] = BeanInspector.getToolTipText(name, methodDescriptors, targetObject, stripToolTipToFirstPoint, tipTextLineLen);
|
||||
itemIndex++;
|
||||
newView = getView(propertyEditors[i]);
|
||||
if (newView == null) {
|
||||
System.err.println("Warning: Property \"" + name + "\" has non-displayabale editor. Skipping.");
|
||||
@ -272,6 +307,8 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
||||
propertyTableModel.addRow(new Object[]{name, newView});
|
||||
}
|
||||
|
||||
propertyTable.setToolTips(toolTips);
|
||||
|
||||
JScrollPane scrollableTable = new JScrollPane(propertyTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
gbConstraints.gridx = 0;
|
||||
gbConstraints.gridy = 1;
|
||||
@ -359,27 +396,6 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
||||
return values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a label to be shown if no other properties are shown.
|
||||
*
|
||||
* @param componentOffset
|
||||
* @param gbLayout
|
||||
* @return
|
||||
*/
|
||||
private JLabel createDummyLabel(int componentOffset, GridBagLayout gbLayout) {
|
||||
JLabel empty = new JLabel("No editable properties", SwingConstants.CENTER);
|
||||
Dimension d = empty.getPreferredSize();
|
||||
empty.setPreferredSize(new Dimension(d.width * 2, d.height * 2));
|
||||
empty.setBorder(BorderFactory.createEmptyBorder(10, 5, 0, 10));
|
||||
GridBagConstraints gbConstraints = new GridBagConstraints();
|
||||
gbConstraints.anchor = GridBagConstraints.CENTER;
|
||||
gbConstraints.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbConstraints.gridy = componentOffset;
|
||||
gbConstraints.gridx = 0;
|
||||
gbLayout.setConstraints(empty, gbConstraints);
|
||||
return empty;
|
||||
}
|
||||
|
||||
private PropertyEditor makeEditor(PropertyDescriptor property, String name, Object value) {
|
||||
PropertyEditor editor = PropertyEditorProvider.findEditor(property, value);
|
||||
if (editor == null) {
|
||||
@ -397,67 +413,10 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
||||
}
|
||||
editor.setValue(value);
|
||||
|
||||
// System.out.println("PSP editor class: " + editor.getClass());
|
||||
|
||||
editor.addPropertyChangeListener(this);
|
||||
return editor;
|
||||
}
|
||||
|
||||
private void addLabelView(int componentOffset, GridBagLayout gbLayout,
|
||||
int i, String name, JComponent newView) {
|
||||
|
||||
propertyLabels[i] = makeLabel(name);
|
||||
views[i] = newView;
|
||||
viewWrappers[i] = new JPanel();
|
||||
viewWrappers[i].setLayout(new BorderLayout());
|
||||
|
||||
gbLayout.setConstraints(propertyLabels[i], makeLabelConstraints(i + componentOffset));
|
||||
add(propertyLabels[i]);
|
||||
JPanel newPanel = makeViewPanel(toolTips[i], propertyLabels[i], views[i], viewWrappers[i]);
|
||||
gbLayout.setConstraints(newPanel, makeViewConstraints(i + componentOffset));
|
||||
add(newPanel);
|
||||
}
|
||||
|
||||
private JLabel makeLabel(String name) {
|
||||
JLabel label = new JLabel(name, SwingConstants.RIGHT);
|
||||
label.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 5));
|
||||
return label;
|
||||
}
|
||||
|
||||
private static JPanel makeViewPanel(String tipText, JLabel label,
|
||||
JComponent view, JComponent viewWrapper) {
|
||||
JPanel newPanel = new JPanel();
|
||||
if (tipText != null) {
|
||||
label.setToolTipText(tipText);
|
||||
view.setToolTipText(tipText);
|
||||
}
|
||||
newPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 0, 10));
|
||||
newPanel.setLayout(new BorderLayout());
|
||||
// @todo: Streiche here i could add the ViewWrapper
|
||||
viewWrapper.add(view, BorderLayout.CENTER);
|
||||
newPanel.add(viewWrapper, BorderLayout.CENTER);
|
||||
return newPanel;
|
||||
}
|
||||
|
||||
private GridBagConstraints makeLabelConstraints(int componentIndex) {
|
||||
GridBagConstraints gbConstraints = new GridBagConstraints();
|
||||
gbConstraints.anchor = GridBagConstraints.EAST;
|
||||
gbConstraints.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbConstraints.gridy = componentIndex;
|
||||
gbConstraints.gridx = 0;
|
||||
return gbConstraints;
|
||||
}
|
||||
|
||||
private GridBagConstraints makeViewConstraints(int componentIndex) {
|
||||
GridBagConstraints gbConstraints = new GridBagConstraints();
|
||||
gbConstraints.anchor = GridBagConstraints.WEST;
|
||||
gbConstraints.fill = GridBagConstraints.BOTH;
|
||||
gbConstraints.gridy = componentIndex;
|
||||
gbConstraints.gridx = 1;
|
||||
gbConstraints.weightx = 100;
|
||||
return gbConstraints;
|
||||
}
|
||||
|
||||
/**
|
||||
* Be sure to give a clone
|
||||
*
|
||||
@ -543,8 +502,6 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener
|
||||
}
|
||||
|
||||
private JPanel makeInfoPanel(String infoText, Object targ, int rowHeight) {
|
||||
Object args[] = {};
|
||||
|
||||
className = targ.getClass().getName();
|
||||
helpButton = new JButton("Help");
|
||||
helpButton.setToolTipText("More information about " + className);
|
||||
@ -1038,9 +995,7 @@ class PropertyCellRenderer implements TableCellRenderer {
|
||||
}
|
||||
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class PropertyCellEditor extends AbstractCellEditor implements TableCellEditor {
|
||||
|
@ -23,8 +23,7 @@ public class GOModuleAdapter extends GenericModuleAdapter implements ModuleAdapt
|
||||
/**
|
||||
* Starts a statistics GUI and the GOProcessor thread.
|
||||
*
|
||||
* @param AdapterName the title of the ModulAdapter
|
||||
* @param Client the client instance
|
||||
* @param adapterName the title of the ModuleAdapter
|
||||
*/
|
||||
public GOModuleAdapter(String adapterName) {
|
||||
super(adapterName, "", OptimizationParameters.getInstance(), false);
|
||||
@ -33,10 +32,11 @@ public class GOModuleAdapter extends GenericModuleAdapter implements ModuleAdapt
|
||||
/**
|
||||
* Starts a statistics GUI and the GOProcessor thread with a given OptimizationParameters file.
|
||||
*
|
||||
* @param AdapterName the title of the ModulAdapter
|
||||
* @param Client the client instance
|
||||
* @param adapterName the title of the ModuleAdapter
|
||||
* @param optimizationParameters the client instance
|
||||
* @param noGuiLogFile
|
||||
*/
|
||||
public GOModuleAdapter(String adapterName, InterfaceOptimizationParameters goParams, String noGuiLogFile) {
|
||||
super(adapterName, "", goParams, false, noGuiLogFile);
|
||||
public GOModuleAdapter(String adapterName, InterfaceOptimizationParameters optimizationParameters, String noGuiLogFile) {
|
||||
super(adapterName, "", optimizationParameters, false, noGuiLogFile);
|
||||
}
|
||||
}
|
@ -583,7 +583,7 @@ public class DifferentialEvolution implements InterfaceOptimizer, java.io.Serial
|
||||
}
|
||||
|
||||
public void optimizeSteadyState() {
|
||||
AbstractEAIndividual indy = null, orig;
|
||||
AbstractEAIndividual indy, orig;
|
||||
int index;
|
||||
|
||||
int nextDoomed = getNextDoomed(population, 0);
|
||||
@ -591,7 +591,6 @@ public class DifferentialEvolution implements InterfaceOptimizer, java.io.Serial
|
||||
// required for dynamic problems especially
|
||||
optimizationProblem.evaluatePopulationStart(population);
|
||||
|
||||
|
||||
/**
|
||||
* Reevalutation mechanism for dynamically changing problems
|
||||
*/
|
||||
@ -654,7 +653,7 @@ public class DifferentialEvolution implements InterfaceOptimizer, java.io.Serial
|
||||
*
|
||||
* @param pop Population to search
|
||||
* @param startIndex index to start the search from
|
||||
* @return index of an overaged individual or -1
|
||||
* @return index of an over aged individual or -1
|
||||
*/
|
||||
protected int getNextDoomed(Population pop, int startIndex) {
|
||||
if (maximumAge > 0) {
|
||||
@ -689,12 +688,12 @@ public class DifferentialEvolution implements InterfaceOptimizer, java.io.Serial
|
||||
/**
|
||||
* Something has changed
|
||||
*
|
||||
* @param name
|
||||
* @param name Event name
|
||||
*/
|
||||
protected void firePropertyChangedEvent(String name) {
|
||||
if (this.populationChangedEventListeners != null) {
|
||||
for (int i = 0; i < this.populationChangedEventListeners.size(); i++) {
|
||||
this.populationChangedEventListeners.get(i).registerPopulationStateChanged(this, name);
|
||||
for (InterfacePopulationChangedEventListener listener : this.populationChangedEventListeners) {
|
||||
listener.registerPopulationStateChanged(this, name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user