提交 c37972b2 编写于 作者: L leonidr

7144065: [macosx] Orphaned Choice popup window

Reviewed-by: anthony, serb
Contributed-by: alexander.potochkin@oracle.com
上级 b4228ccf
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -26,13 +26,13 @@
package sun.lwawt;
import java.awt.Choice;
import java.awt.Point;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.peer.ChoicePeer;
import javax.swing.JComboBox;
import javax.accessibility.Accessible;
import javax.swing.*;
final class LWChoicePeer extends LWComponentPeer<Choice, JComboBox<String>>
implements ChoicePeer, ItemListener {
......@@ -159,5 +159,32 @@ final class LWChoicePeer extends LWComponentPeer<Choice, JComboBox<String>>
}
super.setSelectedItem(anObject);
}
@Override
public void firePopupMenuWillBecomeVisible() {
super.firePopupMenuWillBecomeVisible();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JPopupMenu popupMenu = getPopupMenu();
if (popupMenu != null) {
if (popupMenu.getInvoker() != LWChoicePeer.this.getTarget()) {
popupMenu.setVisible(false);
popupMenu.show(LWChoicePeer.this.getTarget(), 0, 0);
}
}
}
});
}
private JPopupMenu getPopupMenu() {
for (int i = 0; i < getAccessibleContext().getAccessibleChildrenCount(); i++) {
Accessible child = getAccessibleContext().getAccessibleChild(i);
if (child instanceof JPopupMenu) {
return (JPopupMenu) child;
}
}
return null;
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册