📄 worldeditdialog.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 + -