У меня есть большой 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-код ... все было бы полезно.
Спасибо