Почему мои диалоговые окна сообщений JOptionPane появляются за окном консоли? - PullRequest
0 голосов
/ 09 мая 2019

Я делаю несколько простую текстовую игру для моего курса CS. Большая часть игры разыгрывается в окне консоли, однако, в определенный момент, если пользователь выигрывает или проигрывает игру, появляется диалоговое окно сообщения JOptionPane, в котором говорится, что пользователь выиграл или проиграл

Моя проблема в том, что JOptionPane показывает на слое самую дальнюю спину из всех моих других открытых окон и приложений. Во всех моих других подобных программах он всегда появлялся спереди.

Я нашел временное исправление для этого, однако мне было интересно, если кто-нибудь может дать мне точную причину того, почему это может происходить, чтобы избежать проблемы в будущем

1 Ответ

0 голосов
/ 17 мая 2019

Я не совсем уверен, почему именно это происходит, но для любого, кто найдет это в будущем, именно поэтому у меня возникла эта проблема.

В моей программе у меня были определенные разделы, в которых использовались входные данные из окна консоли (например, сканеры), а затем отображались панели JOptionPanes, основанные на определенных требованиях игры (т. Е. Выигрышных проигрышах и т. Д.).

По любой причине, когда вы принимаете пользовательский ввод из класса сканера, а затем открываете JOptionPane, JOptionPane всегда будет открываться в самом дальнем разделе от всех ваших открытых вкладок, что и происходило со мной.

КакЧтобы обойти эту ошибку, я сделал следующее:

  1. Объявите JDialog и установите trueAlwaysOnTop:

    final JDialog dialog = new JDialog();
    dialog.setAlwaysOnTop(true);
    
  2. Каждый раз, когда я сделалоткрыть JOptionPane, вместо записи null в качестве первого параметра, я поставил имя JDialog, чтобы оно выглядело примерно так:

    final JDialog dialog = new JDialog();
    dialog.setAlwaysOnTop(true);
    JOptionPane.showMessageDialog(dialog, "You win!);
    

При этом мои JOptionPanes всегда выталкивалисьперед консолью даже при использовании класса сканера.

...