gpt4 book ai didi

java - 当主窗口最小化时,半透明的 JDialogs 消失

转载 作者:行者123 更新时间:2023-11-30 04:39:46 24 4
gpt4 key购买 nike

window translucency functionality 似乎存在错误在Java 7中(我相信这个问题也存在于Java 6中)。如果我打开一个半透明窗口,然后最小化其父窗口,两者都会如您所料地消失。但是,当您恢复父窗口时,半透明窗口永远不会重新出现。然而,它仍然存在,并且会消耗输入,就好像没有什么问题一样。

这是我的 SSCCE:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class BrokenTranslucentWindow extends JApplet //same problem exists using a JFrame
{
public BrokenTranslucentWindow()
{
JButton b = new JButton("Hello");
b.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
JDialog d = new JDialog(Window.getWindows()[0])
{
@Override
public void paint(Graphics g)
{
g.fillOval(0, 0, getWidth(), getHeight());
}
};
d.setUndecorated(true);
d.setBackground(new Color(0, 0, 0, 0));
d.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
d.setSize(300, 300);
d.setLocationRelativeTo(null);
// d.setModal(true);
d.setVisible(true);
}
});
this.add(b);
}
}

您会注意到,恢复父窗口后,半透明的椭圆形窗口将不可见,但当您位于窗口应在的区域上方时,光标仍会更改为手形光标。

我已提交bug to Oracle ,但在修复之前我确实可以使用更好的解决方法。

我的问题:

有人对防止这种情况发生的解决方法有任何想法吗?

有趣的事实:

  • 如果半透明窗口恰好是模态窗口,这会导致大问题。
  • 我关注的是每像素半透明度,但这同样适用于均匀半透明度。
  • JFrame、浏览器内的 Applet 以及 Applet 查看器内的 Applet 都会出现此问题。

最佳答案

我发现了一种不需要的解决方法。我发布它是希望它能激发一些创意。解决方法是在窗口停用时关闭半透明,并在窗口激活时将其重新打开。

d.addWindowListener(new WindowAdapter()
{
public void windowActivated(WindowEvent e)
{
d.setBackground(new Color(0, 0, 0, 0));
}

public void windowDeactivated(WindowEvent e)
{
d.setBackground(Color.white);
}
});

这并不理想,因为当您单击窗口时它会变得不透明。但是,它确实可以防止窗口永远消失。

关于java - 当主窗口最小化时,半透明的 JDialogs 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12589310/

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