📄 mapeditor.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.dnd.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.net.*;
import java.io.*;
import java.util.*;
public class MapEditor extends JFrame implements Runnable,KeyListener
{
public static final int SCREEN_WIDTH=1024;
public static final int SCREEN_HEIGHT=720;
public static final int BOX_STRUT_HEIGHT = 250;
public static final int MENUITEM_NEW = 0;
public static final int MENUITEM_OPEN = 1;
public static final int MENUITEM_SAVE = 2;
public static final int MENUITEM_SAVEAS = 3;
public static final int MENUITEM_LOADIMAGE = 4;
public static final int MENUITEM_EXIT = 5;
public static final int BT_SET_TILE = 0;
public static final int BT_SET_MAP = 1;
public static final int BT_SET_SCREEN = 2;
public static final int BT_PREVIEW = 3;
public static final int BT_QUIT_PREVIEW = 4;
public static final int MAX_ZOOM_FACTOR = 8;
static int zoomFactor = 1;
Container c;
Container mainFrame = new Container();
Container controlFrame = new Container();
Thread m_t = new Thread(this);
DropTarget dt;
static Box tileBox;
static Box mapBox;
static Box screenBox;
static Box controlBox;
static JLabel lTileWidth = new JLabel("Tile Width");
static JLabel lTileHeight = new JLabel("Tile Height");
static JLabel lMapWidth = new JLabel("Map Width");
static JLabel lMapHeight = new JLabel("Map Height");
static JLabel lScreenWidth = new JLabel("Screen Width");
static JLabel lScreenHeight = new JLabel("Screen Height");
static JTextField tf_tileWidth = new JTextField(1);
static JTextField tf_tileHeight = new JTextField(1);
static JTextField tf_mapWidth = new JTextField(1);
static JTextField tf_mapHeight = new JTextField(1);
static JTextField tf_screenWidth = new JTextField(1);
static JTextField tf_screenHeight = new JTextField(1);
static JButton preview;
static JButton quitPreview;
static JButton setTile;
static JButton setMap;
static JButton setScreen;
static JScrollPane panelScrollPane;
JMenuBar MenuBar = new JMenuBar();
JMenu[] menus = {new JMenu("File")};
JMenuItem[] fileItems = {new JMenuItem("New"), new JMenuItem("Open"), new JMenuItem("Save"), new JMenuItem("Save as"), new JMenuItem("Load Tile"), new JMenuItem("Exit")};
JToolBar toolBar = new JToolBar();
static EditingPanel editingPanel = new EditingPanel();
File destFile;
static Border titleBorder;
static Image mapBuffer;
static Graphics g_mapBuffer;
MapEditor()
{
super("MapEditor");
setDefaultCloseOperation(EXIT_ON_CLOSE);
c=getContentPane();
c.setLayout(new BorderLayout());
GridBagLayout gridBag = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
setBounds(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
controlBox = Box.createVerticalBox();
tileBox = Box.createHorizontalBox();
mapBox = Box.createHorizontalBox();
screenBox = Box.createHorizontalBox();
initToolBar();
initMenuBar();
initButtons();
addKeyListener(this);
// panelScrollPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
// panelScrollPane.setViewportView(editingPanel);
tileBox.add(lTileWidth);
tileBox.add(tf_tileWidth);
tileBox.add(lTileHeight);
tileBox.add(tf_tileHeight);
tileBox.add(setTile);
mapBox.add(lMapWidth);
mapBox.add(tf_mapWidth);
mapBox.add(lMapHeight);
mapBox.add(tf_mapHeight);
mapBox.add(setMap);
screenBox.add(lScreenWidth);
screenBox.add(tf_screenWidth);
screenBox.add(lScreenHeight);
screenBox.add(tf_screenHeight);
screenBox.add(setScreen);
// controlFrame.setLayout(new BorderLayout());
// controlFrame.add(tfBox, BorderLayout.NORTH);
// controlFrame.add(tilePanel, BorderLayout.CENTER);
// controlFrame.add(preview, BorderLayout.SOUTH);
controlBox.add(tileBox);
controlBox.add(Box.createVerticalStrut(BOX_STRUT_HEIGHT));
controlBox.add(mapBox);
controlBox.add(Box.createVerticalStrut(BOX_STRUT_HEIGHT));
controlBox.add(screenBox);
controlBox.add(Box.createVerticalStrut(20));
controlBox.add(preview);
controlBox.add(quitPreview);
mainFrame.setLayout(gridBag);
constraints.weightx = constraints.weighty = 3.0;
constraints.fill = constraints.BOTH;
gridBag.setConstraints(editingPanel, constraints);
mainFrame.add(editingPanel);
constraints.weightx = 1.0;
gridBag.setConstraints(controlBox, constraints);
mainFrame.add(controlBox);
c.add(toolBar, BorderLayout.NORTH);
c.add(mainFrame, BorderLayout.CENTER);
dt = new DropTarget(editingPanel, new TileDropTargetListener());
setVisible(true);
initMapBuffer();
m_t.start();
}
void initMenuBar()
{
for(int i = 0;i < fileItems.length;i++)
{
menus[0].add(fileItems[i]);
fileItems[i].addActionListener(new FileItemListener(i));
if(i == 3 || i == fileItems.length - 2)
{
menus[0].addSeparator();
}
}
setJMenuBar(MenuBar);
for(int i = 0; i < menus.length; i++)
{
MenuBar.add(menus[i]);
}
MenuBar.add(menus[0]);
}
void initToolBar()
{
toolBar.add(new ZoomIn("ZoomIn", new ImageIcon("plus.png")));
toolBar.add(new ZoomOut("ZoomOut", new ImageIcon("minus.png")));
}
void initButtons()
{
setTile = new JButton("Set");
setTile.addActionListener(new ButtonListener(BT_SET_TILE));
setMap = new JButton("Set");
setMap.addActionListener(new ButtonListener(BT_SET_MAP));
setScreen = new JButton("Set");
setScreen.addActionListener(new ButtonListener(BT_SET_SCREEN));
preview = new JButton("Preview");
preview.addActionListener(new ButtonListener(BT_PREVIEW));
quitPreview = new JButton("Quit Preview");
quitPreview.addActionListener(new ButtonListener(BT_QUIT_PREVIEW));
quitPreview.setVisible(false);
}
void initMapBuffer()
{
if(mapBuffer == null)
{
mapBuffer=createImage(editingPanel.EDITING_IMAGE_WIDTH,editingPanel.EDITING_IMAGE_HEIGHT);
}
editingPanel.initMapBuffer();
}
void save(File saveFile)
{
System.out.println("Saving to " + saveFile.getName());
try
{
FileOutputStream fout = new FileOutputStream(saveFile);
DataOutputStream out = new DataOutputStream(fout);
out.writeInt(editingPanel.tileWidth);
out.writeInt(editingPanel.tileHeight);
out.writeInt(editingPanel.mapWidth / editingPanel.tileWidth);
out.writeInt(editingPanel.mapHeight / editingPanel.tileHeight);
for(int i = 0;i < editingPanel.tileData.length;i++)
{
for(int j = 0;j < editingPanel.tileData[0].length;j++)
{
out.writeInt(editingPanel.tileData[i][j]);
System.out.println(editingPanel.tileData[i][j]);
}
}
for(int i = 0;i < editingPanel.tileFlag.length;i++)
{
for(int j = 0;j < editingPanel.tileFlag[0].length;j++)
{
out.writeByte(editingPanel.tileFlag[i][j]);
}
}
out.flush();
fout.close();
out.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
void open(File openFile)
{
System.out.println("Opening " + openFile.getName());
try
{
DataInputStream in = new DataInputStream(new FileInputStream(openFile));
editingPanel.tileWidth = in.readInt();
editingPanel.tileHeight = in.readInt();
editingPanel.nb_tile_in_tile_image_H = editingPanel.imageWidth / zoomFactor / editingPanel.tileWidth;
editingPanel.nb_tile_in_tile_image_V = editingPanel.imageHeight / zoomFactor / editingPanel.tileHeight;
editingPanel.nb_tile_in_map_H = in.readInt();
editingPanel.nb_tile_in_map_V = in.readInt();
editingPanel.mapWidth = editingPanel.tileWidth * editingPanel.nb_tile_in_map_H;
editingPanel.mapHeight = editingPanel.tileHeight * editingPanel.nb_tile_in_map_V;
editingPanel.tileData = new int[editingPanel.nb_tile_in_map_H][editingPanel.nb_tile_in_map_V];
editingPanel.tileFlag = new byte[editingPanel.nb_tile_in_map_H][editingPanel.nb_tile_in_map_V];
for(int i = 0;i < editingPanel.tileData.length;i++)
{
for(int j = 0;j < editingPanel.tileData[0].length;j++)
{
editingPanel.tileData[i][j] = in.readInt();
System.out.println(editingPanel.tileData[i][j]);
}
}
for(int i = 0;i < editingPanel.tileFlag.length;i++)
{
for(int j = 0;j < editingPanel.tileFlag[0].length;j++)
{
editingPanel.tileFlag[i][j] = in.readByte();
}
}
in.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -