我尝试从 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/