2015-11-17 2 views
1

Я могу автоматизировать определенные действия в веб-браузере. По завершении ряда действий появится сообщение JOptionPane, чтобы спросить пользователя, хотят ли они продолжить.Как предотвратить запуск JFrame после закрытия JOptionPane?

После того, как я нажал «Да», мой основной фрейм всплывал над моим веб-браузером, что разрушает мой рабочий процесс.

Я могу заставить браузер перемещаться к передней части основного фрейма, но я хотел бы знать, возможно ли предотвратить появление основного фрейма после выбора опции в диалоговом окне JOptionPane?

+0

Обычно вы указываете JFrame в качестве родительского окна JOptionPane. Попробуйте использовать «null» для родителя, то, надеюсь, JOptionPane будет работать независимо от JFrame. – camickr

+0

@camickr Я использую «нуль», и к сожалению, это не помогает. – Csh

ответ

0

Не удалось найти какие-либо опции на JOptionPane, поэтому я начал изучать, как легко было бы переопределить его, используя другой JFrame. Я решил отключить основной кадр и включить его позже (кажется, что это то, что JOptionPane делает внутренне так или иначе), и, прежде чем я переписана JOptionPane я заметил, что это решает проблему:

public static void main(String[] args) { 
    final JFrame frame = new JFrame(); 

    JButton button = new JButton("hello"); 
    button.addActionListener(e -> { 
     frame.setEnabled(false); // disable main frame 
     JOptionPane.showMessageDialog(frame, "hello"); 
     frame.setEnabled(true); // enable main frame 
    }); 
    frame.setContentPane(button); 

    frame.setVisible(true); 
    frame.setSize(600, 480); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
} 

Однако я не уверен, если это будет работать на всех платформах. Помогает ли вам это?

Если нет, я бы рекомендовал заменить JOptionPane.showMessageDialog(frame, "hello"); на ваш собственный JFrame, чтобы вы могли полностью контролировать его. Вам нужно будет добавить WindowListener, чтобы включить основной кадр, когда он закрыт. Однако вы потеряете функциональность блокировки - это может быть сложнее реализовать, чем того стоит.

Смежные вопросы