gpt4 book ai didi

Java Swing 透明度绘制问题

转载 作者:行者123 更新时间:2023-11-29 06:13:32 26 4
gpt4 key购买 nike

编辑:

我针对以下内容提交了错误(不过可能需要几天时间才能获得批准): http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7043319

更多细节:

  • 它适用于 Windows Sun JDK 1.6 版本 13 和 17
  • 它在带有 OpenJDK 1.6.0_22 和 Sun JDK 1.6.0_24 的 Ubuntu 11.04 x64 上失败

我想要的是制作一个背景图像面板,上面有附加面板(带有附加组件 - 例如 JButtons、自定义形状等 - 在其中)并正确绘制所有内容。我正在使用 JLayeredPane为此目的,在我的应用程序中,但为了举例,下面的代码就足够了。无论是否存在以下问题,我都乐于接受有关如何做我想做的事情的建议。

我遇到了这幅画表现得非常奇怪的问题。它没有完全重绘(例如,仅图像上方的顶部),它重绘 - 从我注意到间隔越来越大的 - 步骤(例如第 1 次油漆、第 3 次油漆、第 9 次油漆、第 21 次油漆、第 64 次油漆等。 ).我的猜测是我在这里实现得太多了——下面有什么明显的错误吗?

在单独的注释中,下面有三行注释。有趣的是,取消注释其中任何一个并注释以下行可以解决问题。这些图像具有以下属性(似乎哪个图像并不重要 - 只是大小):

cat.jpg       JPEG 640x533 640x533+0+0 8-bit DirectClass  110KB 0.000u 0:00.000
cat-small.jpg JPEG 200x167 200x167+0+0 8-bit DirectClass 7.99KB 0.000u 0:00.000

这是我遇到问题的 Java 代码:

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;

public class SwingDrawingPrb {
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
final JFrame frame = new JFrame("SwingDrawingPrb");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final Container contentPane = frame.getContentPane();

frame.setLocation(550, 50);
frame.setSize(1000, 800);
frame.setVisible(true);

// ImageIcon image = new ImageIcon(SwingDrawingPrb.class.getResource("/cat-small.jpg"));
ImageIcon image = new ImageIcon(SwingDrawingPrb.class.getResource("/cat.jpg"));

final JPanel imagePanel = new JPanel() {
// Color trans = new Color(255, 0, 0, 255);
Color trans = new Color(255, 0, 0, 64);

protected void paintComponent(Graphics g) {
System.out.println("painting");
g.setColor(Color.white);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(trans);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.blue);
g.drawLine(0, 0, 1000, 1000);
}
};
imagePanel.setBounds(0, 0, image.getIconWidth() + 200, image.getIconHeight() + 200);
imagePanel.setLayout(null);

// JLabel imageLabel = new JLabel("Hello, world!");
JLabel imageLabel = new JLabel(image);

imageLabel.setBounds(100, 100, image.getIconWidth(), image.getIconHeight());
imageLabel.addMouseMotionListener(new MouseAdapter() {
public void mouseMoved(MouseEvent e) {
System.out.println("mouseMoved");
imagePanel.repaint();
}
});
imagePanel.add(imageLabel);

contentPane.add(imagePanel);
}
}

最佳答案

你需要添加:

imagePanel.setOpaque(false);

参见 Backgrounds With Transparency获取更多信息。

关于Java Swing 透明度绘制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5931619/

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