Tôi có một cửa sổ bật lên được hiển thị khi người dùng nhấp vào nút. Tôi muốn ẩn cửa sổ bật lên khi bất kỳ sự kiện nào sau đây xảy ra:Làm cách nào để ẩn một cửa sổ bật lên khi bạn nhấp vào một nơi khác
- Người dùng nhấp vào một nơi khác trong ứng dụng. (Ví dụ: bảng điều khiển nền)
- Người dùng thu nhỏ ứng dụng.
JPopupMenu có hành vi này, nhưng tôi cần nhiều hơn JMenuItems. Khối mã sau đây là một minh họa đơn giản để chứng minh việc sử dụng hiện tại.
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);
}
}
Đây là một giải pháp tốt. Thêm giao diện WindowFocusListener vào Popup thực hiện thủ thuật. Tôi đã kết thúc bằng cách sử dụng một JWindow thay vì một JDialog bởi vì tôi không muốn trang trí cửa sổ. Tôi sẽ đăng giải pháp cuối cùng. –