Создать окно проверки свойств, кнопка, управляемая как JDialog

В том, что я задал изначально, не было четко сформулирован мой вопрос / проблема, поэтому я объясню это лучше. У меня есть 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);
    }

}
8
задан aymeric 17 August 2012 в 15:47
поделиться