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

📄 worldeditdialog.java

📁 Massively Multiplayer Space Trading and Combat game. This is an online strategy game, not a 3D space
💻 JAVA
字号:
/*
 * WorldEditDialog.java
 *
 * Copyright (C) 2000 Jason M. Hanley
 * Released under the GNU General Public License (GPL)
 * See license.txt for additional information.
 *
 * Created on July 30, 2000, 10:34 PM
 */
 
package fate.world.edit;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

import fate.*;
import fate.ui.*;
import fate.util.*;
import fate.world.*;

/** 
 * UI dialog for editing all world information.
 *
 * @author  preylude@s3m.com
 * @version 0.1.0
 */
public class WorldEditDialog extends JDialog
  implements ActionListener, TreeSelectionListener, TreeModelListener {

  Universe universe;
  JPanel editPanel;
  UniverseEditPanel universeEditPanel;
  GalaxyEditPanel galaxyEditPanel;
  SolarSystemEditPanel solarSystemEditPanel;
  PlanetoidEditPanel planetoidEditPanel;

  JTree treeWorld;
  DefaultTreeModel treeModel;
  DefaultMutableTreeNode rootNode;
  
  /** Creates new WorldEditDialog */
  public WorldEditDialog( JFrame owner ) {
    
    super( owner, "World Editor", true );

    universe = FateServer.universe;
    if ( universe == null ) {
      Debug.trace( "WorldEditDialog: Warning: universe is null" );
    }
    
    rootNode = new DefaultMutableTreeNode( universe );
    treeModel = new DefaultTreeModel( rootNode );

    treeWorld = new JTree( treeModel );
    treeWorld.addTreeSelectionListener( this );
    treeWorld.setEditable( false );
    treeWorld.getSelectionModel().setSelectionMode
            (TreeSelectionModel.SINGLE_TREE_SELECTION);
    treeWorld.getSelectionModel().addTreeSelectionListener( this );
    treeWorld.setShowsRootHandles(true);

    JScrollPane scrollWorld = new JScrollPane( treeWorld );
    scrollWorld.setPreferredSize( new Dimension( 200, 300 ) );
//    JPanel panel = new JPanel();
//    panel.add( scrollWorld );
    getContentPane().add( scrollWorld, BorderLayout.CENTER );
    
    // Create a CardLayout with all the editing panels
    editPanel = new JPanel( new CardLayout() );
//    editPanel.setPreferredSize( new Dimension( 400, 300 ) );

    // Create individual object's editing panels
    universeEditPanel = new UniverseEditPanel( this );
    galaxyEditPanel = new GalaxyEditPanel( this );
    solarSystemEditPanel = new SolarSystemEditPanel( this );
    planetoidEditPanel = new PlanetoidEditPanel( this );
    editPanel.add( universeEditPanel, "fate.world.Universe" );
    editPanel.add( galaxyEditPanel, "fate.world.Galaxy" );
    editPanel.add( solarSystemEditPanel, "fate.world.SolarSystem" );
    editPanel.add( planetoidEditPanel, "fate.world.Planetoid" );

    // Add the editing panel to the main dialog window
    getContentPane().add( editPanel, BorderLayout.EAST );
    
    updateTree();
  }

  /** Updates the JTree with current World data */
  public void updateTree() {
    rootNode.removeAllChildren();
    treeModel.reload();
    DefaultMutableTreeNode nodeGalaxies = new DefaultMutableTreeNode( "Galaxies" );
    treeModel.insertNodeInto( nodeGalaxies , rootNode, rootNode.getChildCount());

    DefaultMutableTreeNode nodeGalaxy = null, nodeSolar = null,
      nodePlanetoid = null;
    
    // Insert the galaxies into the tree
    Vector vector = new Vector( universe.mapGalaxies.values() );
    Iterator iterGalaxy = vector.iterator();
    Galaxy galaxy;
    while( iterGalaxy.hasNext() ) {
      galaxy = (Galaxy) iterGalaxy.next();
      nodeGalaxy = new DefaultMutableTreeNode( galaxy );
      treeModel.insertNodeInto( nodeGalaxy , nodeGalaxies, nodeGalaxies.getChildCount());
      treeWorld.scrollPathToVisible( new TreePath(nodeGalaxy.getPath()) );
      
      // Insert all solar systems under the current galaxy into the tree
      Iterator iterSolarSystem = (new Vector( galaxy.mapSolarSystems.values() )).iterator();
      SolarSystem solarSystem;
      while( iterSolarSystem.hasNext() ) {
        solarSystem = (SolarSystem) iterSolarSystem.next();
        nodeSolar = new DefaultMutableTreeNode( solarSystem );
        treeModel.insertNodeInto( nodeSolar , nodeGalaxy, nodeGalaxy.getChildCount());
        treeWorld.scrollPathToVisible( new TreePath(nodeSolar.getPath()) );

        // Insert all planetoids under the current solar systems into the tree
        Iterator iterPlanetoid = (new Vector( solarSystem.mapPlanetoids.values() )).iterator();
        Planetoid planetoid;
        while( iterPlanetoid.hasNext() ) {
          planetoid = (Planetoid) iterPlanetoid.next();
          nodePlanetoid = new DefaultMutableTreeNode( planetoid );
          treeModel.insertNodeInto( nodePlanetoid , nodeSolar, nodeSolar.getChildCount());
          treeWorld.scrollPathToVisible( new TreePath(nodePlanetoid.getPath()) );
        }
      }
    }
    
    validate();
  }
  
  public void actionPerformed( ActionEvent e ) {
    String strAction = e.getActionCommand();
    Debug.trace( "WorldEditDialog: Action: " + strAction );

    if ( strAction.equals( "AddGalaxy" ) ) {
      Galaxy galaxy = new Galaxy();
      galaxy.name = "New Galaxy";
      universe.mapGalaxies.put( galaxy );
    }

    updateTree();
  }
  
  public void valueChanged( TreeSelectionEvent e ) {
    DefaultMutableTreeNode node =
      (DefaultMutableTreeNode)e.getPath().getLastPathComponent();
    Object o = node.getUserObject();
    Class c = o.getClass();

    Debug.trace( "WorldEditDialog: TreeSelect: " + c.getName() );
    
    if ( c.getName().equals( "fate.world.Universe" ) ) {
      CardLayout layout = (CardLayout) editPanel.getLayout();
      layout.show( editPanel, c.getName() );
    }
    else if ( c.getName().equals( "fate.world.Galaxy" ) ) {
      galaxyEditPanel.setData( (Galaxy)o );
      CardLayout layout = (CardLayout) editPanel.getLayout();
      layout.show( editPanel, c.getName() );
    }
    else if ( c.getName().equals( "fate.world.SolarSystem" ) ) {
      solarSystemEditPanel.setData( (SolarSystem)o );
      CardLayout layout = (CardLayout) editPanel.getLayout();
      layout.show( editPanel, c.getName() );
    }
    else if ( c.getName().equals( "fate.world.Planetoid" ) ) {
      planetoidEditPanel.setData( (Planetoid)o );
      CardLayout layout = (CardLayout) editPanel.getLayout();
      layout.show( editPanel, c.getName() );
    }
    else if ( c.getName().equals( "java.lang.String" ) ) {
      if ( ((String)o).equals( "Galaxies" ) ) {
        CardLayout layout = (CardLayout) editPanel.getLayout();
        layout.show( editPanel, "fate.world.Universe" );
      }
    }

    treeWorld.invalidate();
    validate();
  }

  public void treeNodesInserted( TreeModelEvent e ) {
    
  }
  
  public void treeNodesChanged( TreeModelEvent e ) {
    
  }
  
  public void treeStructureChanged( TreeModelEvent e ) {
    
  }
  
  public void treeNodesRemoved( TreeModelEvent e ) {
    
  }
  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -