увеличить JPanel и все его компоненты - PullRequest
1 голос
/ 02 июня 2010

У меня есть большой JPanel, который содержит много объектов TileMapping (TileMapping расширяет JPanel). Я хочу увеличить масштаб большого JPanel и всех его компонентов, чтобы их можно было масштабировать. TileMapping имеет изображение, которое, конечно же, должно быть увеличено.

вот мой класс TileMapping

public class TileMapping extends JPanel {

    private double zoom = 1.0;
    private Mapping mapping;
    private int height;
    private int width;
    private int xCoord;
    private int yCoord;

    TileMapping(Mapping m, int w, int h, int x, int y) {
        super();
        mapping = m;
        height = h;
        width = w;
        this.xCoord = x;
        this.yCoord = y;
        this.setPreferredSize(new Dimension(w, h));
    }

    public int getXcoord() {
        return xCoord;
    }

    public int getYcoord() {
        return yCoord;
    }

    public Mapping getMapping() {
        return mapping;
    }

    public void setMapping(Mapping m) {
        mapping = m;
    }

    public void originalSize() {
        zoom = 1;
    }

    public void zoomIn() {
        zoom += 0.2;
    }

    public void zoomOut() {
        zoom -= 0.2;
    }

    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        if (mapping.getImage() != null) {
            BufferedImage bg = mapping.getImage();
            g2d.scale(zoom, zoom);
            g2d.drawImage(bg, 0, 0, width, height, this);
        } else {
            g2d.scale(zoom, zoom);
            this.setBackground(Color.white);
        }

    }
}

Мне нужно знать, как мне продолжить это на главной JPanel, которая заполняется с помощью этого кода: Это часть класса MapWindow. Если вы внимательно прочитаете код, вы поймете, о чем я говорю. По сути, это Tile MapEditor, и я имитирую плитку как JPanel, которая содержит отображаемый объект (отображение - это привязка между символом ASCII и изображением), который вы помещаете.

private void populateMapPanel(Map map) {
        GridBagConstraints c = new GridBagConstraints();
        mapPanel.setLayout(new GridBagLayout());

        for (int i = 0; i < map.getMapGrid().getRows(); i++) {
            for (int j = 0; j < map.getMapGrid().getColumns(); j++) {
                tile = new TileMapping(map.getMapItem(i, j), cellSize, cellSize, i, j);
                tile.setBorder(new LineBorder(Color.black));
                tile.addMouseListener(this);
                tile.addMouseMotionListener(this);
                c.gridx = i;
                c.gridy = j;
                mapPanel.add(tile, c);
            }
        }
        mapPanel.validate();
        mapPanel.repaint();
    }

Мне нужно знать, как сделать следующее: 1. Когда пользователь нажимает Zoom In, mapPanel должен увеличивать, а также все изображения на меньших панелях. 2. когда пользователь щелкает и перетаскивает TileMappings, на них должно быть нарисовано изображение, и это изображение, конечно, должно масштабироваться, если mapPanel увеличено.

Псевдокод, идеи, подсказки, java-код ... все было бы полезно. Спасибо

1 Ответ

3 голосов
/ 02 июня 2010

Возможно с JXLayer ? См. Пример и демонстрацию jnlp на Универсальный TransformUI на демонстрация JXLayer 4.0 от Пита Блока .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...