Неможливо сфокусувати JOptionPane на передньому плані за допомогою рамки за замовчуванням

Я маю частину коду в моїй програмі, де мені потрібно відобразити повідомлення про помилку. Код:

String ErrorMsg=" Error to be Diplayed ";
JOptionPane.showMessageDialog(null, ErrorMsg, "Failure", JOptionPane.ERROR_MESSAGE);

Примітка. Використовується рамка за замовчуванням.

Повідомлення успішно відображається, але до підтвердження, натиснувши кнопку «ОК», якщо я спробую будь-який інший успішний потік, буде втрачено поле керування повідомленнями, а вікно повідомлень не буде блокується на передньому плані навіть послідовними потоками.

I want the Message Box to be on the foreground always until the user presses "OK" button, rather losing focus and getting hidden. How to do that?

0
@ShaikMd: якщо ви хочете поведінки GUI, то створіть його за допомогою графічного інтерфейсу. Все, що ви бачите, це те, що ви отримуєте.
додано Автор Hovercraft Full Of Eels, джерело
Що ви маєте на увазі під "рамкою за умовчанням"? Ця частина повинна передаватися showMessageDialog замість null .
додано Автор Andrew Thompson, джерело
Щоб краще допомогти, опублікуйте SSCCE .
додано Автор Andrew Thompson, джерело
Я не використовую жодного компонента [frame], тому поле буде нульовим.
додано Автор Shaik Md, джерело
@HovercraftFullOfEels: Моя програма не є програмою AWT/Swing, мені просто потрібно відобразити лише одну помилку, тому не використовується кадр як таке.
додано Автор Shaik Md, джерело

4 Відповіді

Якщо ви хочете, щоб JOptionPane поводився так, як це було в повноцінному графічному інтерфейсі користувача, спочатку створіть повноцінний GUI Swing. Забудьте, використовуючи "кадри за замовчуванням" або все, що ви використовуєте (можливо, консолі). Ви бажаєте поведінки графічного інтерфейсу, і для цього потрібно створити графічний інтерфейс, відобразивши вашу програму в JFrame, і JFrame запустити JOptionPane.

3
додано

Передайте посилання на батьківську рамку замість нуля (перший параметр).

2
додано
У вас є "Стандартний фрейм використовується". Передайте посилання на JOptionPane.
додано Автор StanislavL, джерело
@StanislavL: Я думаю, що він називає консоль "рамкою за умовчанням". 1+, хоча для спроби допомогти з цим дуже заплутаним питанням.
додано Автор Hovercraft Full Of Eels, джерело
У коді немає батьківського компонента.
додано Автор Shaik Md, джерело

Я хочу, щоб вікно повідомлень було завжди на передньому плані, доки користувач не натискає кнопку "ОК", а втрачає фокус та приховує.

Використовуйте JFrame і setAlwaysOnTop (true) . Вам потрібно буде відобразити власне повідомлення та кнопку.

JOptionPane використовує JDialog позаду сцен. JDialog не підтримує цю властивість.

Редагувати:

Щоб отримати піктограму, яку використовує панель параметрів, ви можете використовувати:

Icon icon = UIManager.getIcon("OptionPane.errorIcon");

Список інших піктограм див .: Стандартні налаштування UIManager .

2
додано
Я не думав про це, і це буде працювати, дякую і 1+!
додано Автор Hovercraft Full Of Eels, джерело
@ShaikMd, див. Редагування.
додано Автор camickr, джерело
Я виконував ті самі кроки, але як відображати символ помилки?
додано Автор Shaik Md, джерело
Я створив Jframe, використовував JLabel і Jbutton зробив це на передньому плані, вимкнув min, max в заголовку ... коротко, це виглядало як діалогове вікно ... Тепер я хочу показати символ помилки "X" в це просто як діалогове вікно у випадку помилки ... як це зробити? я розширюю клас Jdialog ..
додано Автор Shaik Md, джерело

Нижче наведено код, щоб зробити повідомлення JoptionPane з рамкою за замовчуванням, яка буде встановлена ​​зверху.

        JDialog dialog = new JOptionPane("ErrorMsg",JOptionPane.ERROR_MESSAGE,JOptionPane.DEFAULT_OPTION).createDialog(" Failure"); 
        dialog.setAlwaysOnTop(true);
        dialog.setVisible(true);
        dialog.dispose();
2
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників