gpt4 book ai didi

java - 缩放 JPanel 及其所有组件

转载 作者:行者123 更新时间:2023-11-29 06:21:12 24 4
gpt4 key购买 nike

我有一个很大的 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,我将 Tile 模拟为 JPanel,它包含您放置的映射对象(映射是 ASCII 字符和图像之间的绑定(bind))。

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 代码……任何东西都会有所帮助。谢谢

最佳答案

也许与 JXLayer ?请参阅位于 JXLayer 4.0 demonstration by Piet BlokA generic TransformUI 中的示例和 jnlp 演示.

关于java - 缩放 JPanel 及其所有组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2955000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com