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

📄 boardeditor.java

📁 MegaMek is a networked Java clone of BattleTech, a turn-based sci-fi boardgame for 2+ players. Fight
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * MegaMek - Copyright (C) 2000-2003 Ben Mazur (bmazur@sev.org) *  *  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. */package megamek.client.ui.AWT;import keypoint.PngEncoder;import megamek.client.event.BoardViewEvent;import megamek.client.event.BoardViewListenerAdapter;import megamek.common.Coords;import megamek.common.Game;import megamek.common.Hex;import megamek.common.IBoard;import megamek.common.IHex;import megamek.common.ITerrain;import megamek.common.MapSettings;import megamek.common.Terrains;import megamek.common.util.BoardUtilities;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Canvas;import java.awt.Checkbox;import java.awt.Choice;import java.awt.Component;import java.awt.Container;import java.awt.Cursor;import java.awt.Dialog;import java.awt.FileDialog;import java.awt.FlowLayout;import java.awt.Font;import java.awt.Frame;import java.awt.Graphics;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.GridLayout;import java.awt.Image;import java.awt.Insets;import java.awt.Label;import java.awt.Panel;import java.awt.Scrollbar;import java.awt.SystemColor;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.TextEvent;import java.awt.event.TextListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FilenameFilter;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Iterator;public class BoardEditor extends Container implements ItemListener,        ActionListener, TextListener, IMapSettingsObserver {    private Frame frame = new Frame();    private Game game = new Game();    private IBoard board = game.getBoard();    private BoardView1 bv;    private CommonMenuBar menuBar = new CommonMenuBar();    private CommonAboutDialog about = null;    private CommonHelpDialog help = null;    private CommonSettingsDialog setdlg = null;    private IHex curHex = new Hex();    private String curpath, curfile, curfileImage;    // buttons and labels and such:    private HexCanvas canHex;    private Label labElev;    private TextField texElev;    private Button butElevUp;    private Button butElevDown;    private Label labTerrain;    private java.awt.List lisTerrain;    private Button butDelTerrain;    private Panel panTerrainType;    private Choice choTerrainType;    private TextField texTerrainLevel;    private Panel panTerrExits;    private Checkbox cheTerrExitSpecified;    private TextField texTerrExits;    private Button butTerrExits;    private Panel panRoads;    private Checkbox cheRoadsAutoExit;    private Label labTheme;    private TextField texTheme;    private Button butAddTerrain;    private Label blankL;    private Label labBoard;    private Panel panButtons;    private Button butBoardNew, butBoardLoad;    private Button butBoardSave, butBoardSaveAs;    private Button butBoardSaveAsImage;    private Button butMiniMap;    private Dialog minimapW;    private MiniMap minimap;        private Coords lastClicked;        private MapSettings mapSettings = new MapSettings();    /**     * Creates and lays out a new Board Editor frame.     */    public BoardEditor() {        try {            bv = new BoardView1(game, frame);        } catch (IOException e) {            new AlertDialog(frame,Messages.getString("BoardEditor.FatalError"), Messages.getString("BoardEditor.CouldntInitialize")+e); //$NON-NLS-1$ //$NON-NLS-2$            frame.dispose();        }        bv.addBoardViewListener(new BoardViewListenerAdapter(){            public void hexMoused(BoardViewEvent b) {                Coords c = b.getCoords();                if(c.equals(lastClicked))                    return;                lastClicked = c;                bv.cursor(c);                if((b.getModifiers() & InputEvent.ALT_MASK) != 0) {                    setCurrentHex(board.getHex(b.getCoords()));                }                else if((b.getModifiers() & InputEvent.CTRL_MASK) != 0) {                    if(!board.getHex(b.getCoords()).equals(curHex)) {                        paintHex(b.getCoords());                    }                }                else if((b.getModifiers() & InputEvent.SHIFT_MASK) != 0) {                    addToHex(b.getCoords());                }                else if((b.getModifiers() & InputEvent.BUTTON1_MASK) != 0){                    resurfaceHex(b.getCoords());                }            }        });        bv.setUseLOSTool(false);        setupEditorPanel();        setupFrame();        frame.setVisible(true);        if (true==GUIPreferences.getInstance().getNagForMapEdReadme()) {            String title = Messages.getString("BoardEditor.readme.title"); //$NON-NLS-1$            String body = Messages.getString("BoardEditor.readme.message"); //$NON-NLS-1$            ConfirmDialog confirm = new ConfirmDialog(frame,title,body,true);            confirm.setVisible(true);            if ( !confirm.getShowAgain() ) {                GUIPreferences.getInstance().setNagForMapEdReadme(false);            }            if ( confirm.getAnswer() ) {                showHelp();            }        }    }        /**     * Sets up the frame that will display the editor.     */    private void setupFrame() {        frame.setTitle(Messages.getString("BoardEditor.title")); //$NON-NLS-1$        frame.setLayout(new BorderLayout());        // Create a scroll bars to surround the board view.        Panel scrollPane = new Panel();        scrollPane.setLayout (new BorderLayout());        Scrollbar vertical = new Scrollbar (Scrollbar.VERTICAL);        Scrollbar horizontal = new Scrollbar (Scrollbar.HORIZONTAL);        scrollPane.add (bv, BorderLayout.CENTER);        scrollPane.add (vertical, BorderLayout.EAST);        scrollPane.add (horizontal, BorderLayout.SOUTH);        frame.add(scrollPane, BorderLayout.CENTER);        // Assign the scrollbars to the board viewer.        bv.setScrollbars (vertical, horizontal);        frame.add(this, BorderLayout.EAST);        menuBar.addActionListener( this );        frame.setMenuBar( menuBar );              frame.setBackground(SystemColor.menu);        frame.setForeground(SystemColor.menuText);            if (GUIPreferences.getInstance().getWindowSizeHeight() != 0) {            frame.setLocation(GUIPreferences.getInstance().getWindowPosX(), GUIPreferences.getInstance().getWindowPosY());            frame.setSize(GUIPreferences.getInstance().getWindowSizeWidth(), GUIPreferences.getInstance().getWindowSizeHeight());        } else {            frame.setSize(800, 600);        }        // Give the scrollbars large initial values.        horizontal.setVisibleAmount (frame.getSize().width);        vertical.setVisibleAmount (frame.getSize().height);        // when frame is closing, just hide it        frame.addWindowListener(new WindowAdapter() {                public void windowClosing(WindowEvent e) {                    frame.setVisible(false);                    setMapVisible(false);                }            });    }    /**     * Sets up the editor panel, which goes on the right of the map and has     * controls for editing the current square.     */    private void setupEditorPanel() {        canHex = new HexCanvas();        labElev = new Label(Messages.getString("BoardEditor.labElev"), Label.RIGHT); //$NON-NLS-1$        texElev = new TextField("0", 1); //$NON-NLS-1$        texElev.addActionListener(this);        texElev.addTextListener(this);        butElevUp = new Button(Messages.getString("BoardEditor.butElevUp")); //$NON-NLS-1$        butElevUp.addActionListener(this);        butElevDown = new Button(Messages.getString("BoardEditor.butElevDown")); //$NON-NLS-1$        butElevDown.addActionListener(this);            labTerrain = new Label(Messages.getString("BoardEditor.labTerrain"), Label.LEFT); //$NON-NLS-1$        lisTerrain = new java.awt.List(6);        lisTerrain.addItemListener(this);        refreshTerrainList();                butDelTerrain = new Button(Messages.getString("BoardEditor.butDelTerrain")); //$NON-NLS-1$        butDelTerrain.addActionListener(this);                choTerrainType = new Choice();        for (int i = 1; i < Terrains.SIZE; i++) {            choTerrainType.add(Terrains.getName(i));        }                texTerrainLevel = new TextField("1", 1); //$NON-NLS-1$                butAddTerrain = new Button(Messages.getString("BoardEditor.butAddTerrain")); //$NON-NLS-1$        butAddTerrain.addActionListener(this);                butMiniMap = new Button(Messages.getString("BoardEditor.butMiniMap")); //$NON-NLS-1$        butMiniMap.setActionCommand( "viewMiniMap" ); //$NON-NLS-1$        butMiniMap.addActionListener(this);                panTerrainType = new Panel(new BorderLayout());        panTerrainType.add(choTerrainType, BorderLayout.WEST);        panTerrainType.add(texTerrainLevel, BorderLayout.CENTER);                cheTerrExitSpecified = new Checkbox(Messages.getString("BoardEditor.cheTerrExitSpecified")); //$NON-NLS-1$        butTerrExits = new Button(Messages.getString("BoardEditor.butTerrExits")); //$NON-NLS-1$        texTerrExits = new TextField("0", 1); //$NON-NLS-1$        butTerrExits.addActionListener(this);            panTerrExits = new Panel(new FlowLayout());        panTerrExits.add(cheTerrExitSpecified);        panTerrExits.add(butTerrExits);        panTerrExits.add(texTerrExits);        panRoads = new Panel(new FlowLayout());        cheRoadsAutoExit = new Checkbox(Messages.getString("BoardEditor.cheRoadsAutoExit")); //$NON-NLS-1$        cheRoadsAutoExit.addItemListener( this );        panRoads.add(cheRoadsAutoExit);        labTheme = new Label(Messages.getString("BoardEditor.labTheme"), Label.LEFT); //$NON-NLS-1$        texTheme = new TextField("", 15); //$NON-NLS-1$        texTheme.addTextListener(this);        labBoard = new Label(Messages.getString("BoardEditor.labBoard"), Label.LEFT); //$NON-NLS-1$

⌨️ 快捷键说明

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