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

📄 searchdialog.java

📁 tiled地图编辑器是2d的,很不错的国外软件,使用起来很方便的
💻 JAVA
字号:
/* *  Tiled Map Editor, (c) 2004-2006 * *  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. * *  Adam Turk <aturk@biggeruniverse.com> *  Bjorn Lindeijer <b.lindeijer@xs4all.nl> */package tiled.mapeditor.dialogs;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Iterator;import java.util.Vector;import javax.swing.*;import tiled.core.*;import tiled.mapeditor.selection.SelectionLayer;import tiled.mapeditor.util.MultisetListRenderer;import tiled.mapeditor.widget.VerticalStaticJPanel;import tiled.mapeditor.Resources;/** * @version $Id: SearchDialog.java 683 2006-06-25 14:17:37Z bjorn $ */public class SearchDialog extends JDialog implements ActionListener{    private final Map map;    private JComboBox searchCBox, replaceCBox;    private Point currentMatch;    private SelectionLayer sl;    private static final double LIST_TILE_SCALE = 0.5;    private static final String DIALOG_TITLE = Resources.getString("dialog.search.title");    private static final String FIND_LABEL = Resources.getString("dialog.search.find.label");    private static final String REPLACE_LABEL = Resources.getString("dialog.search.replace.label");    private static final String FIND_BUTTON = Resources.getString("dialog.search.find.button");    private static final String FIND_ALL_BUTTON = Resources.getString("dialog.search.findall.button");    private static final String REPLACE_BUTTON = Resources.getString("dialog.search.replace.button");    private static final String REPLACE_ALL_BUTTON = Resources.getString("dialog.search.replaceall.button");    private static final String CLOSE_BUTTON = Resources.getString("general.button.close");    public SearchDialog(JFrame parent) {        this(parent, null);    }    public SearchDialog(JFrame parent, Map map) {        super(parent, DIALOG_TITLE, false);        this.map = map;        init();        setLocationRelativeTo(parent);    }    private void init() {        final MultisetListRenderer tileListRenderer;        tileListRenderer = new MultisetListRenderer(LIST_TILE_SCALE);        /* SEARCH PANEL */        JPanel searchPanel = new JPanel();        searchPanel.setBorder(BorderFactory.createEtchedBorder());        searchPanel.setLayout(new GridBagLayout());        GridBagConstraints c = new GridBagConstraints();        c.fill = GridBagConstraints.BOTH;        c.weightx = 2; c.weighty = 1;        searchPanel.add(new JLabel(FIND_LABEL), c);        c.gridx = 1;        searchCBox = new JComboBox();        searchCBox.setRenderer(tileListRenderer);        //searchCBox.setSelectedIndex(1);        searchCBox.setEditable(false);        searchPanel.add(searchCBox, c);        c.gridy = 1;        c.gridx = 0;        searchPanel.add(new JLabel(REPLACE_LABEL), c);        c.gridx = 1;        replaceCBox = new JComboBox();        replaceCBox.setRenderer(tileListRenderer);        //searchCBox.setSelectedIndex(1);        replaceCBox.setEditable(false);        searchPanel.add(replaceCBox,c);        queryTiles(searchCBox);        //replaceCBox.addItem(null);        queryTiles(replaceCBox);        /* SCOPE PANEL */        /*        JPanel scopePanel = new JPanel();        scopePanel.setBorder(BorderFactory.createCompoundBorder(                    BorderFactory.createTitledBorder("Scope"),                    BorderFactory.createEmptyBorder(0, 5, 5, 5)));        */        final JButton bFind = new JButton(FIND_BUTTON);        final JButton bFindAll = new JButton(FIND_ALL_BUTTON);        final JButton bReplace = new JButton(REPLACE_BUTTON);        final JButton bReplaceAll = new JButton(REPLACE_ALL_BUTTON);        final JButton bClose = new JButton(CLOSE_BUTTON);        bFind.addActionListener(this);        bFindAll.addActionListener(this);        bReplace.addActionListener(this);        bReplaceAll.addActionListener(this);        bClose.addActionListener(this);        /* BUTTONS PANEL */        JPanel buttonPanel = new JPanel();        buttonPanel.setLayout(new GridLayout(2, 2, 5, 5));        buttonPanel.add(bFind);        buttonPanel.add(bFindAll);        buttonPanel.add(bReplace);        buttonPanel.add(bReplaceAll);        JPanel closePanel = new VerticalStaticJPanel();        closePanel.setLayout(new BorderLayout());        closePanel.add(bClose, BorderLayout.EAST);        JPanel mainPanel = new JPanel();        mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));        mainPanel.add(searchPanel, BorderLayout.NORTH);        mainPanel.add(Box.createRigidArea(new Dimension(0, 5)));        //mainPanel.add(scopePanel);        //mainPanel.add(Box.createRigidArea(new Dimension(0, 5)));        mainPanel.add(buttonPanel);        mainPanel.add(Box.createRigidArea(new Dimension(0, 5)));        mainPanel.add(closePanel);        getContentPane().add(mainPanel);        getRootPane().setDefaultButton(bFind);        pack();    }    private void queryTiles(JComboBox b) {        final Vector sets = map.getTilesets();        final Iterator itr = sets.iterator();        while (itr.hasNext()) {            TileSet ts = (TileSet)itr.next();            b.addItem(ts);            final Iterator tileIterator = ts.iterator();            while (tileIterator.hasNext()) {                Tile tile = (Tile)tileIterator.next();                b.addItem(tile);            }        }    }    public void actionPerformed(ActionEvent e) {        String command = e.getActionCommand();        if (command.equals(CLOSE_BUTTON)) {            map.removeLayerSpecial(sl);            dispose();        } else if (command.equals(FIND_BUTTON)) {            if (searchCBox.getSelectedItem() instanceof Tile) {                find((Tile)searchCBox.getSelectedItem());            }        } else if (command.equals(FIND_ALL_BUTTON)) {            if (sl != null) {                map.removeLayerSpecial(sl);            }            sl = new SelectionLayer(map.getWidth(), map.getHeight());            Rectangle bounds = new Rectangle();            final Iterator itr = map.getLayers();            while (itr.hasNext()) {                MapLayer layer = (MapLayer) itr.next();                if (layer instanceof TileLayer) {                    layer.getBounds(bounds);                    for (int y = 0; y < bounds.height; y++) {                        for (int x = 0; x < bounds.width; x++) {                            if (((TileLayer)layer).getTileAt(x,y) == searchCBox.getSelectedItem()) {                                sl.select(x,y);                            }                        }                    }                }            }            map.addLayerSpecial(sl);            map.touch();        } else if (command.equals(REPLACE_ALL_BUTTON)) {            if (!(searchCBox.getSelectedItem() instanceof TileSet) && !(replaceCBox.getSelectedItem() instanceof TileSet))                replaceAll((Tile) searchCBox.getSelectedItem(),(Tile) replaceCBox.getSelectedItem());        } else if (command.equals(REPLACE_BUTTON)) {            if (searchCBox.getSelectedItem() instanceof Tile && replaceCBox.getSelectedItem() instanceof Tile) {                if (currentMatch == null) {                    find((Tile)searchCBox.getSelectedItem());                }                // run through the layers, look for the first instance of the                // tile we need to replace                final Iterator itr = map.getLayers();                while (itr.hasNext()) {                    MapLayer layer = (MapLayer) itr.next();                    if (layer instanceof TileLayer) {                        if (((TileLayer)layer).getTileAt(currentMatch.x,currentMatch.y) == searchCBox.getSelectedItem()) {                            ((TileLayer)layer).setTileAt(currentMatch.x,currentMatch.y, (Tile) replaceCBox.getSelectedItem());                            break;                        }                    }                }                // find the next instance, effectively stepping forward in our                // replace                find((Tile)searchCBox.getSelectedItem());            }        }    }    private void replaceAll(Tile f, Tile r) {        // TODO: Allow for "scopes" of one or more layers, rather than all layers        final Iterator itr = map.getLayers();        while (itr.hasNext()) {            MapLayer layer = (MapLayer) itr.next();            if (layer instanceof TileLayer) {                ((TileLayer)layer).replaceTile(f,r);            }        }        map.touch();    }    private void find(Tile f) {        boolean bFound = false;        if (sl != null) {            map.removeLayerSpecial(sl);            map.touch();        }        sl = new SelectionLayer(map.getWidth(), map.getHeight());        Rectangle bounds = new Rectangle();        int startx = currentMatch == null ? 0 : currentMatch.x;        int starty = currentMatch == null ? 0 : currentMatch.y;        for (int y = starty; y < map.getHeight() && !bFound; y++) {            for (int x = startx; x < map.getWidth() && !bFound; x++) {                final Iterator itr = map.getLayers();                while (itr.hasNext()) {                    MapLayer layer = (MapLayer) itr.next();                    if (layer instanceof TileLayer) {                        layer.getBounds(bounds);                        if (((TileLayer)layer).getTileAt(x,y) == searchCBox.getSelectedItem()) {                            if (currentMatch != null) {                                if (currentMatch.equals(new Point(x,y))) {                                    continue;                                }                            }                            sl.select(x,y);                            bFound = true;                            currentMatch = new Point(x,y);                            break;                        }                    }                }            }        }        if (bFound) {            map.addLayerSpecial(sl);            map.touch();        }    }}

⌨️ 快捷键说明

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