我的問題類似於this,但我認爲有一個更簡單的例子。設置JFrame背景透明製作PopupMenu爲空
基本上通過調用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);
}
}
這裏是發生了什麼事的形象:
有趣的是,出現這種情況時,我點擊JFrame的右側。不知道爲什麼。請記住,我並不是100%確定AWTUtilities.setWindowOpaque(window, false)
確實是這個問題的原因,但是無論何時我刪除該行時,一切似乎都很順利。
編輯:正如camickr
指出,looks like this happens when the popup menu is not fully contained in the bounds of the parent window.
奇怪...的Java 6和Windows 7操作系統,沒有任何問題,Java 7的和Windows 7,沒有問題... – MadProgrammer
@MadProgrammer:真的嗎?我在Java 7和Windows 7上,嗯。 – kir
默認情況下JPopupMenus在完全包含在窗口內時是輕量級的。問題出現在彈出窗口的任何部分必須出現在窗口之外 - 然後爲彈出窗口創建一個新的重窗口。這個問題只在那個沉重的窗口中出現。 – Lunchbox