Im используя несколько showInputDialogs в программе. Когда один из этих входных данных всплывает, он замораживает все остальные окна в фоновом режиме, пока не получит вход, есть ли способ сделать это не заморозить другие окна?showInputDialog замерзает другие окна
0
A
ответ
3
Если «замораживание» означает, что пользователь не может получить доступ к другим окнам, тогда ключ должен сделать новый диалог немодальным диалогом. Вы можете извлечь JDialog из JOptionPane, а затем выбрать, чтобы отобразить его немодальным способом. JOptionPane API покажет вам, как это сделать. Найдите раздел под названием «Прямое использование:»
Редактировать: как говорится в Эндрю! 1+
Игра с кодом ....
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.*;
public class Foo {
public static void main(String[] args) {
final JTextField textfield = new JTextField(10);
textfield.setFocusable(false);
final JPanel panel = new JPanel();
panel.add(textfield);
panel.add(new JButton(new AbstractAction("Push Me") {
private JOptionPane optionPane;
private JDialog dialog;
private JTextField optionTextField = new JTextField(10);
@Override
public void actionPerformed(ActionEvent arg0) {
if (dialog == null) {
JPanel optionPanel = new JPanel(new BorderLayout());
optionPanel.add(new JLabel("Enter some stuff"),
BorderLayout.PAGE_START);
optionPanel.add(optionTextField, BorderLayout.CENTER);
optionPane = new JOptionPane(optionPanel,
JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
dialog = optionPane.createDialog(panel, "Get More Info");
dialog.setModal(false);
dialog.addComponentListener(new ComponentAdapter() {
@Override
public void componentHidden(ComponentEvent arg0) {
Integer value = (Integer) optionPane.getValue();
if (value == null) {
return;
}
if (value == JOptionPane.OK_OPTION) {
textfield.setText(optionTextField.getText());
}
}
});
}
dialog.setVisible(true);
}
}));
JFrame frame = new JFrame("Frame");
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
3
Используйте покадрово JDialog
вместо этого. См. How to Use Modality in Dialogs.
Смежные вопросы
- 1. Ошибка при отмене showInputDialog
- 2. Событие вызова через showInputDialog
- 3. JOptionPane showInputDialog position
- 4. JOptionPane showInputDialog null?
- 5. Слушайте другие окна процессов
- 6. предотвращает наложение окна на другие видимые окна
- 7. showInputDialog делает «если» работа неправильно
- 8. Проверка строки пуста из showInputDialog
- 9. JOptionPane showInputDialog отменить кнопку NullPointerException
- 10. joptionpane значение по умолчанию showinputdialog
- 11. JOptionPane showInputDialog с пользовательскими кнопками
- 12. Java GUI Accessing Buttons From showInputDialog
- 13. CFileDialog замерзает при запуске с помощью диалогового окна Modeless
- 14. Установка драйверов в другие окна
- 15. UIAlertViewDelegate и другие окна оповещений
- 16. Почему pygame замерзает при pygame.event.get() при перемещении/перетаскивании окна?
- 17. OpenGL | ES 2.0 glClear команда замерзает до изменения состояния окна
- 18. DataGridView.Invoke замерзает
- 19. Возврат к предыдущему ShowInputDialog после ShowMessageDialog
- 20. showInputDialog умножить на междунар или двойная
- 21. Почему мой цикл замерзает?
- 22. Макро замерзает слово
- 23. DatePicker и другие всплывающие окна скрыты за модального всплывающего окна
- 24. Netrw и другие окна открываются одновременно: нет окна переключения
- 25. WPF приложения замерзает
- 26. SwipeRefreshLayout Got Action_Move замерзает вид
- 27. Запретить пользователю переходить на другие окна
- 28. Emacs другие окна или-предыдущего буфера
- 29. Emacs shortcut, чтобы убить другие видимые окна
- 30. Как читать другие окна из другой программы
* «Искать раздел под названием« Прямое использование: »« О, я не думал об этом. +1 Это * - это проблема, связанная с воссозданием функциональности 'JOptionPane'. –
Я проверил ее, но я не вижу, как она работает с inputdialogs? У меня есть inputdialogs в стилях tablename = JOptionPane.showInputDialog ("Enter tablename * (используйте заглавные буквы)"); – Looptech