Настройка диалогового окна Java Swing (kotlin) modal=false приводит к исчезновению его дочерних элементов

Я пытаюсь сделать что-то вроде ожидания / загрузки окна для процесса, который иногда может занять, например, 2 минуты или больше. Проблема в том, что установка (неблокирующего) модального набора в false приводит к тому, что метка и кнопка не отображаются. А установка его в true блокирует все приложение в ожидании взаимодействия с пользователем.

Я использую Java 17 (пробовал и с Zulu, и с Liberica).

private fun createWaitDialog(parent: JFrame): JDialog {
    val dialog = JDialog(parent, "Reloading non-modal...", false) // childs are INVISIBLE
    // val dialog = JDialog(parent, "Reloading modal", true) // childs are visible
    dialog.layout = BorderLayout()
    dialog.setSize(300, 200)
    dialog.setLocationRelativeTo(parent)

    val messageLabel = JLabel("Please wait", JLabel.CENTER)

    val closeButton = JButton("Close")
    closeButton.addActionListener { _: ActionEvent? -> dialog.dispose() }

    val buttonPanel = JPanel()
    buttonPanel.add(closeButton)

    dialog.add(messageLabel, BorderLayout.EAST)
    dialog.add(buttonPanel, BorderLayout.SOUTH)

    // also tried with this:
    //        dialog.invalidate()
    //        dialog.validate()
    //        dialog.repaint()
    //        dialog.pack()

    dialog.isVisible = true
    return dialog
}
Ерофей
Вопрос задан12 апреля 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.