В том, что я задал изначально, не было четко сформулирован мой вопрос / проблема, поэтому я объясню это лучше. У меня есть JButton
, который делает JDialog
видимым. JDialog имеет WindowListener
, который устанавливает его как НЕ видимый в событии windowDeactivated ()
, которое запускается каждый раз, когда пользователь щелкает мышью вне диалогового окна. Кнопка ActionListener
проверяет, является ли диалоговое окно видимым, скрывает его, если истинно, показывает его, если ложно.
windowDeactivated ()
всегда будет запускаться независимо от того, нажата ли кнопка или нет, пока пользователь щелчки за пределами диалога. Проблема я m есть, когда пользователь нажимает кнопку, чтобы закрыть диалоговое окно. Диалог закрывается WindowListener
, а затем ActionListener
пытается его отобразить.
Если windowDeactivated ()
не setVisible (false )
, то диалоговое окно все еще открыто, но находится за родительским окном. Я спрашиваю, как получить доступ к местоположению щелчка внутри windowDeactivated ()
. Если я знаю, что пользователь нажал кнопку, и windowDeactivated () может пропустить скрытие диалогового окна, чтобы ActionListener
кнопки увидел, что он все еще виден, и скроет его.
public PropertiesButton extends JButton { private JDialog theWindow; public PropertiesButton() { theWindow = new JDialog(); theWindow.setUndecorated(true); theWindow.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); theWindow.add(new JMenuCheckBoxItem("Something")); theWindow.addWindowListener(new WindowListener() { // just an example, need to implement other methods public void windowDeactivated(WindowEvent e) { theWindow.setVisible(false); } }); this.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (theWindow.isVisible()) { theWindow.setVisible(false); } else { JButton btn = (JButton)e.getSource(); theWindow.setLocation(btn.getLocationOnScreen.x,btn.getLocationOnScreen.x-50); theWindow.setVisible(true); } } }); theWindow.setVisible(false); } }