gpt4 book ai didi

java - JLayeredPane 重绘删除了一些图像

转载 作者:行者123 更新时间:2023-11-30 04:33:20 26 4
gpt4 key购买 nike

我需要一个 UI,我想在其中描绘网络设备的图形表示。为此,我只是加载多个图像并将它们一一重叠以显示设备的当前状态。我必须支持此 View 的缩放。缩放代码如下所示。

public void zoom(double factor){
if (factor < MIN_ZOOM_VALUE)
factor = MIN_ZOOM_VALUE;
else if (factor > MAX_ZOOM_VALUE)
factor = MAX_ZOOM_VALUE;

scaleFactor = factor;

layeredPane.revalidate();
layeredPane.repaint();
}

图像被添加为标签。

private class ImageLabel extends JLabel{

private ImageIcon image;
private Position position;

public ImageLabel(ImageIcon image, Position position){
super(image);
this.image = image;
this.position = position;
}

public void paintComponent(Graphics g) {

int newX = (int)(position.getLeft() * scaleFactor);
int newY = (int)(position.getTop() * scaleFactor);

Graphics2D g2 = (Graphics2D)g;
int newW = (int)(position.getWidth() * scaleFactor);
int newH = (int)(position.getHeight() * scaleFactor);

setBounds(newX, newY, newW, newH);

g2.setRenderingHint(
//RenderingHints.KEY_INTERPOLATION,
//RenderingHints.VALUE_INTERPOLATION_BILINEAR);
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.drawImage(image.getImage(), 0, 0, newW, newH, null);

}
}

但这里的问题是,当我放大一次并缩小时,一些图像消失了。知道为什么它会这样吗?

最佳答案

+1 给@AndrewThompsons 评论。

我看到的唯一另一个问题是你不尊重油漆链。

另外,请始终记住通过调用重写绘制方法(以及就此而言的任何重写方法)的 super.XXX 实现来尊重绘制链,除非您知道您要做什么正在执行并且故意不调用其super的实现,否则可能/将会发生像您描述的那样的视觉工件。

为此,您需要调用 super.paintComponent(Graphics g) 作为重写的 paintComponent 中的第一个方法,如下所示:

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

//do other drawings here
}

另请注意我如何使用 @Override 注释,以便我确定我覆盖了正确的方法。

关于java - JLayeredPane 重绘删除了一些图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14052982/

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