gpt4 book ai didi

java - 设置 JFrame 背景透明使 PopupMenu 空白

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:07 25 4
gpt4 key购买 nike

我的问题类似于this ,但我认为有一个更简单的例子。

基本上通过调用 AWTUtilities.setWindowOpaque(window, false) 使 JFrame 的背景透明,我的 JPopupMenu 有时显示为空白。

public class JavaApplication8 {

JPopupMenu popup;
JMenuItem open;
JLabel bgLabel = new JLabel("testing");

public static void main(String[] args) {
// TODO code application logic here

JFrame window = new JFrame("test");

URL bgURL = JavaApplication8.class.getResource("images/bg.jpg");
ImageIcon bg = new ImageIcon(bgURL);

JavaApplication8 test = new JavaApplication8();
test.setPopupMenu();
test.bgLabel.setIcon(bg);

window.add(test.bgLabel, BorderLayout.CENTER);

window.setUndecorated(true);
AWTUtilities.setWindowOpaque(window, false);
//window.pack();
window.setSize(200, 200);
window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
window.setLocationRelativeTo(null);
window.setVisible(true);

}

public void setPopupMenu(){
popup = new JPopupMenu();
open = new JMenuItem("Test");

popup.add(open);
this.bgLabel.setComponentPopupMenu(popup);
}

}

这是正在发生的事情的图像:

enter image description here enter image description here

有趣的是,只要我单击 JFrame 的右侧,就会发生这种情况。不知道为什么。请记住,我不是 100% 确定 AWTUtilities.setWindowOpaque(window, false) 确实是导致此问题的原因,但是每当我删除该行时,一切似乎都正常。

编辑:如 camickr 所述,当弹出菜单未完全包含在父窗口的边界内时,看起来会发生这种情况。

最佳答案

背景:我不确定为什么使用透明/半透明背景会导致重量级弹出窗口及其绘制方式出现问题,但确实如此——无论您是否使用 AWTUtilities.setWindowOpaque(window, false)frame.setBackground(new Color(0, 0, 0, 0))

HeavyWeightPopup 是在弹出窗口无法完全放入目标窗口时创建的。所以 +User2280704 如果您单击窗口的最底部,您的问题也会出现。 LightWeightPopup 没有这个问题——因此,菜单在窗口中间工作。

另外,值得注意的是,通常菜单会在第一次呈现时表现良好,只是在接下来的时候会出现问题。

答案:我想出了一个解决方法,在显示任何弹出窗口后调用重绘。启动应用程序时只需调用以下代码。

PopupFactory.setSharedInstance(new PopupFactory() 
{
@Override
public Popup getPopup(Component owner, final Component contents, int x, int y) throws IllegalArgumentException
{
Popup popup = super.getPopup(owner, contents, x, y);
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
contents.repaint();
}
});
return popup;
}
});

关于java - 设置 JFrame 背景透明使 PopupMenu 空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18265085/

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