java - 如何从PNG图片构建个人JFrame

标签 java image swing jpanel paint

我尝试从 PNG 图片构建我个人的 JFrame。但是 Mac OSX 10.8 和 Windows 7 之间存在不同的行为。(我必须使用 JDK 6)

这是我的代码:

[...]

public Fenetre()
{

    this.setLocationRelativeTo(null);
    this.setUndecorated(true);
    this.setBackground(new Color(0,0,0,0));

    try {
        image = ImageIO.read(this.getClass().getResource("/Images/frame.png"));     
    } catch (IOException e) {
        e.printStackTrace();
    }

    this.setSize(image.getWidth(),image.getHeight());                
    this.setLayout(null);


    panel = new JPanel();
    JButton quit = new JButton("Quitter");
    panel.add(quit);
    Dimension size = panel.getPreferredSize();
    panel.setBounds(67, 45, size.width, size.height);

    this.add(panel);

    this.addMouseListener(this);
    this.addMouseMotionListener(this);
    this.setVisible(true);      

}

public void paint(Graphics g) {

    Graphics2D g2 =(Graphics2D) g;
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC)); // SRC_ATOP > Windows
    g2.drawImage(image, 0, 0, this);
    panel.update(panel.getGraphics());

}

[...]

Mac OSX 10.8 (AlphaComposite = SRC) 上的结果:

http://imageshack.us/photo/my-images/15/maczr.png/

然后,在 Windows 7 (AlphaComposite = SRC_ATOP) 上,在启动和移动它时,我可以看到:

http://imageshack.us/photo/my-images/16/windowsqu.jpg/

怎么做到的?

最佳答案

您的代码不完整,但在我看来您正在覆盖 JFrame 的 paint() 方法。你永远不应该这样做(除非你知道你在做什么并且你调用了 super.paint(..))!

如果您想在框架中显示图像,则:

a) 将带有图像的 JLabel 添加到框架
b) 或者通过覆盖 paintComponent() 方法在 JPanel 上进行自定义绘制,然后将面板添加到框架。

关于java - 如何从PNG图片构建个人JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678831/

相关文章:

java - 如何在 Java 中使用 RUDP 创建一个简单的服务器客户端应用程序?

java - 快速调用生成包含从 0 到 N 的数字的数组

java - 如何通过java中的mouselisteners获取2D数组(jlabel)的索引?

java - 更改 JScrollpane 的原点

java - 平滑 Swing 动画

java - MouseListener 帮助 Java

java - 我的 JLabels 都不会出现

jquery - 同一个 XHTML 页面上的多个 Jquery 淡入淡出图像

java - 图片加载速度非常慢

javascript - 加载图像预览