Java Swing透明度绘图问题 [英] Java Swing transparency drawing issues

查看:284
本文介绍了Java Swing透明度绘图问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

修改:

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

I submitted a bug for the below (it may take a a few days to become approved though): http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7043319

更多细节:


  • 适用于Windows Sun JDK 1.6版本13和17

  • 在Ubuntu 11.04 x64上使用OpenJDK 1.6.0_22和Sun JDK 1.6.0_24

我想要的是制作一个背景图像面板,上面有额外的面板(附加组件 - 例如JButtons,自定义形状等) - 在他们中)并正确地绘制所有这些。我正在使用 JLayeredPane 我的应用程序,但为了一个例子,下面的代码应该足够了。无论以下问题如何,我都乐于接受如何做我想做的建议。

What I want is to make a background image panel with additional panels on top of it (with additional components - e.g. JButtons, custom shapes, etc. - in them) and draw all that correctly. I'm using JLayeredPane for that purpose in my app, but for the sake of an example the below code should suffice. I'm open to suggestions about how to do what I want regardless of the below problem.

我遇到的问题是这幅画表现得非常奇怪。它没有完全重新绘制(例如,只有图像上方的顶部),它重新绘制 - 从我注意到越来越多的间隔 - 步骤(例如第一涂料,第三涂料,第九涂料,第21涂料,第64涂料等)。 )。我的猜测是我在这里实施太多了 - 下面有什么明显的错误吗?

I'm running into the issue that the painting is behaving really weird. It doesn't repaint fully (e.g. only the top part above the image), it repaints in - from what I've noticed increasingly spaced - steps (e.g. 1st paint, 3rd paint, 9th paint, 21st paint, 64th paint, etc.). My guess is that I'm going too much into implementation here - is there anything obviously wrong with the below?

另外,下面有三条注释行。有趣的是,取消注释任何一个并评论以下行解决了这个问题。图像具有以下属性(似乎无论哪个图像 - 只是大小):

On a separate note, there are three commented lines below. Interestingly enough, uncommenting any of them and commenting the following line solves the problem. The images are with the following attributes (and it seems it doesn't matter which image - just the size):

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代码:

Here's the Java code I'm having issues with:

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);

参见透明度背景以获取更多信息。

这篇关于Java Swing透明度绘图问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆