⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gemlayoutconfigurationdialog.java

📁 用JGraph编的软件
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/*
 * @(#)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 + -