📄 gemlayoutconfigurationdialog.java
字号:
/*
* @(#)GEMLayoutConfigurationDialog.java 1.0 12.08.2003
*
* Copyright (C) 2003 sven_luzar
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
package org.jgraph.layout;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Properties;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
/******************************************************************************/
/*############################################################################*/
/*############################################################################*/
/*############################################################################*/
/*############################################################################*/
/******************************************************************************/
/**
* @author winkler
* @author Sven Luzar
*
*/
public class GEMLayoutConfigurationDialog extends JDialog {
private JTextField tf_initTemperature;
private JTextField tf_minTemperature;
private JTextField tf_maxTemperature;
private JTextField tf_prefEdgeLength;
private JTextField tf_gravitation;
private JTextField tf_randomImpulseRange;
private JTextField tf_overlapDetectWidth;
private JTextField tf_overlapPrefDistance;
private JTextField tf_alphaOsc;
private JTextField tf_alphaRot;
private JTextField tf_sigmaOsc;
private JTextField tf_sigmaRot;
private JTextField tf_lu_initTemperature;
private JTextField tf_lu_minTemperature;
private JTextField tf_lu_maxTemperature;
private JTextField tf_lu_prefEdgeLength;
private JTextField tf_lu_gravitation;
private JTextField tf_lu_randomImpulseRange;
private JTextField tf_lu_overlapDetectWidth;
private JTextField tf_lu_overlapPrefDistance;
private JTextField tf_lu_alphaOsc;
private JTextField tf_lu_alphaRot;
private JTextField tf_lu_sigmaOsc;
private JTextField tf_lu_sigmaRot;
private JTextField tf_lu_depth;
private JTextField tf_lu_cluster_initTemperature;
private JTextField tf_lu_cluster_forceScalingFactor;
private JTextField tf_lu_cluster_factor;
private JTextField tf_lu_perimeter_initSize;
private JTextField tf_lu_perimeter_sizeInc;
private JCheckBox cb_computePermutation;
private JCheckBox cb_endPerAverage;
private JCheckBox cb_avoidOverlapping;
private JCheckBox cb_useOptimizationAlg;
private JCheckBox cb_lu_enableLayoutUpdate;
private JCheckBox cb_lu_computePermutation;
private JCheckBox cb_lu_endPerAverage;
private JCheckBox cb_lu_avoidOverlapping;
private JCheckBox cb_lu_useOptimizationAlg;
private JCheckBox cb_lu_cluster_enable;
private JComboBox comb_lu_method;
private JComboBox comb_loadPreSets;
private JButton button_ConfigOptimizeAlg;
private JButton button_lu_ConfigOptimizeAlg;
private JPanel panelLayoutUpdate;
private JScrollPane panelLayoutRunWrapper;
private JScrollPane panelLayoutUpdateWrapper;
//private JPanel panelLUClusterWrapper;
private Properties[] presetConfigs;
private AnnealingLayoutController optimizeAlgController;
private AnnealingLayoutController lu_optimizeAlgController;
private JTabbedPane tp_main;
/** configurations
*/
private static final String CAPTION = "GEM Layout Configuration";
/** Boolean for the cancel operation variables
*/
private boolean canceled = false;
/******************************************************************************/
/**
* Creates new form GEMLayoutConfigurationDialog
*/
public GEMLayoutConfigurationDialog(Frame parent, Properties[] preSets, AnnealingLayoutController optimizer, AnnealingLayoutController lu_optimizer) {
super(parent, true);
presetConfigs = preSets;
optimizeAlgController = optimizer;
lu_optimizeAlgController = lu_optimizer;
initComponents();
// size, title and location
setTitle(CAPTION);
setName(CAPTION);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int)((double)(screen.width - this.getWidth() ) / 2.0);
int y = (int)((double)(screen.height - this.getHeight()) / 2.0);
setLocation(x, y);
}
/******************************************************************************/
protected Properties[] getPresetConfigs(){
return presetConfigs;
}
/******************************************************************************/
protected Properties getPresetConfig(int index){
return presetConfigs[index];
}
/******************************************************************************/
protected void setPresetConfigs(Properties[] preSets){
presetConfigs = preSets;
}
/******************************************************************************/
/**
* Changes the configuration of the dialog. This is one, of the array of
* configurations, gained in the constructor or with
* {@link #setPresetConfigs(Properties[])}. Therfore the index has to be
* whithin the bounds of this array.
*
* @param index Index of the configuration set
*/
protected void switchPreferences(int index){
Properties config = presetConfigs[index];
double alphaOsc = Math.toDegrees(Double.parseDouble((String)config.get(GEMLayoutController.KEY_ALPHA_OSC)));
double alphaRot = Math.toDegrees(Double.parseDouble((String)config.get(GEMLayoutController.KEY_ALPHA_ROT)));
double lu_alphaOsc = Math.toDegrees(Double.parseDouble((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_ALPHA_OSC)));
double lu_alphaRot = Math.toDegrees(Double.parseDouble((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_ALPHA_ROT)));
tf_initTemperature .setText((String)config.get(GEMLayoutController.KEY_INIT_TEMPERATURE));
tf_minTemperature .setText((String)config.get(GEMLayoutController.KEY_MIN_TEMPERATURE));
tf_maxTemperature .setText((String)config.get(GEMLayoutController.KEY_MAX_TEMPERATURE));
tf_prefEdgeLength .setText((String)config.get(GEMLayoutController.KEY_PREF_EDGE_LENGTH));
tf_gravitation .setText((String)config.get(GEMLayoutController.KEY_GRAVITATION));
tf_randomImpulseRange .setText((String)config.get(GEMLayoutController.KEY_RANDOM_IMPULSE_RANGE));
tf_overlapDetectWidth .setText((String)config.get(GEMLayoutController.KEY_OVERLAPPING_DETECTION_WIDTH));
tf_overlapPrefDistance .setText((String)config.get(GEMLayoutController.KEY_OVERLAPPING_PREF_DISTANCE));
tf_lu_initTemperature .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_INIT_TEMPERATURE));
tf_lu_minTemperature .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_MIN_TEMPERATURE));
tf_lu_maxTemperature .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_MAX_TEMPERATURE));
tf_lu_prefEdgeLength .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_PREF_EDGE_LENGTH));
tf_lu_gravitation .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_GRAVITATION));
tf_lu_randomImpulseRange .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_RANDOM_IMPULSE_RANGE));
tf_lu_overlapDetectWidth .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_OVERLAPPING_DETECTION_WIDTH));
tf_lu_overlapPrefDistance.setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_OVERLAPPING_PREF_DISTANCE));
tf_lu_cluster_initTemperature.setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_CLUSTERING_INIT_TEMPERATURE));
tf_lu_cluster_forceScalingFactor.setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_CLUSTERING_FORCE_SCALING_FACTOR));
tf_lu_cluster_factor .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_CLUSTERING_FACTOR));
tf_alphaOsc .setText(String.valueOf(alphaOsc));
tf_alphaRot .setText(String.valueOf(alphaRot));
tf_sigmaOsc .setText((String)config.get(GEMLayoutController.KEY_SIGMA_OSC));
tf_sigmaRot .setText((String)config.get(GEMLayoutController.KEY_SIGMA_ROT));
tf_lu_alphaOsc .setText(String.valueOf(lu_alphaOsc));
tf_lu_alphaRot .setText(String.valueOf(lu_alphaRot));
tf_lu_sigmaOsc .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_SIGMA_OSC));
tf_lu_sigmaRot .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_SIGMA_ROT));
tf_lu_depth .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_DEPTH));
tf_lu_perimeter_initSize .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_METHOD_PERIMETER_INIT_SIZE));
tf_lu_perimeter_sizeInc .setText((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_METHOD_PERIMETER_SIZE_INC));
cb_computePermutation .setSelected(isTrue((String)config.get(GEMLayoutController.KEY_COMPUTE_PERMUTATION)));
cb_endPerAverage .setSelected(isTrue((String)config.get(GEMLayoutController.KEY_END_CONDITION_AVERAGE)));
cb_avoidOverlapping .setSelected(isTrue((String)config.get(GEMLayoutController.KEY_AVOID_OVERLAPPING)));
cb_useOptimizationAlg .setSelected(isTrue((String)config.get(GEMLayoutController.KEY_OPTIMIZE_ALGORITHM_ENABLED)));
cb_lu_enableLayoutUpdate.setSelected(isTrue((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_ENABLED)));
cb_lu_computePermutation.setSelected(isTrue((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_COMPUTE_PERMUTATION)));
cb_lu_endPerAverage .setSelected(isTrue((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_END_CONDITION_AVERAGE)));
cb_lu_avoidOverlapping .setSelected(isTrue((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_AVOID_OVERLAPPING)));
cb_lu_useOptimizationAlg.setSelected(isTrue((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_OPTIMIZE_ALGORITHM_ENABLED)));
cb_lu_cluster_enable .setSelected(isTrue((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_CLUSTERING_ENABLED)));
comb_lu_method.setSelectedItem((String)config.get(GEMLayoutController.KEY_LAYOUT_UPDATE_METHOD));
}
/******************************************************************************/
/**
* Transforms a string value in a boolean value. The string has be "true" or
* "false". Lower or upper case doesn't matter.
*
* @param boolValue A String, consisting of the word "true" or "false".
* @return The boolean expression of the string.
*/
protected boolean isTrue(String boolValue){
if( boolValue != null ){
if( "TRUE".equals(boolValue.toUpperCase()) ){
return true;
}
else if( "FALSE".equals(boolValue.toUpperCase()) ){
return false;
}
}
return false;
}
/******************************************************************************/
/**
* Called by pressing the cancel button. Leaves the dialog without
* saving.
*/
private void action_cancel() {
setVisible(false);
dispose();
canceled = true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -