Mam wyskakujące okienko, które jest wyświetlane, gdy użytkownik kliknie przycisk. Chciałbym ukryć wyskakujące okienko, gdy wystąpi jedno z następujących zdarzeń:Jak ukryć wyskakujące okienko, gdy klikniesz gdzieś indziej?
- Użytkownik klika gdziekolwiek indziej w aplikacji. (Na przykład panel tła)
- Użytkownik minimalizuje aplikację.
JPopupMenu ma to zachowanie, ale potrzebuję czegoś więcej niż tylko JMenuItems. Poniższy blok kodu jest uproszczonym przykładem ilustrującym bieżące użycie.
import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
public class PopupTester extends JFrame {
public static void main(String[] args) {
final PopupTester popupTester = new PopupTester();
popupTester.setLayout(new FlowLayout());
popupTester.setSize(300, 100);
popupTester.add(new JButton("Click Me") {
@Override
protected void fireActionPerformed(ActionEvent event) {
Point location = getLocationOnScreen();
int y = (int) (location.getY() + getHeight());
int x = (int) location.getX();
JLabel myComponent = new JLabel("Howdy");
Popup popup = PopupFactory.getSharedInstance().getPopup(popupTester, myComponent, x, y);
popup.show();
}
});
popupTester.add(new JButton("No Click Me"));
popupTester.setVisible(true);
popupTester.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
To jest dobre rozwiązanie. Dodanie interfejsu WindowFocusListener do wyskakującego okienka powoduje, że jest to możliwe. Skończyło się na użyciu JWindow zamiast JDialog, ponieważ nie chciałem dekoracji okna. Wezmę ostateczne rozwiązanie. –