У меня есть Java-приложение - оно импортирует как AWT
, так и Swing
- которое заполняет весь экран без «украшения», поэтому его не нужно минимизировать.В какой-то момент ему нужно отобразить файл справки для пользователя.Он должен блокироваться, пока пользователь не закроет окно.Итак, вот код:
fileview dlg = new fileview(this, title, filename, "");
dlg.setModal(true); //Makes it UI blocking!
dlg.setResizable(false);
dlg.setAlwaysOnTop(true);
dlg.setVisible(true);
fileview
расширяется JDialog
, поэтому он становится независимым окном, за исключением того, что он закрывается, когда родитель делает.
К сожалению, яобнаружил, что на некоторых платформах он чтит setAlwaysOnTop(true)
, а иногда нет.Когда не работает, если пользователь «щелкает», фокус ввода смещается обратно к родителю, но из-за setModal(true)
он зависает.
К сожалению, я потратил впустую НЕДЕЛЮ на этом, и я 'Мне не хватает времени, чтобы все заработало, и у меня еще много работы, поэтому Я бросил тратить свое время, пытаясь выяснить, ПОЧЕМУ setAlwaysOnTop
не работает. (я читалКак я и сдаюсь, смешение AWT
и Swing
может иметь к этому какое-то отношение, но поскольку Swing
построен поверх AWT
, ИДК, что думать.)
Вместо этого я хотел бы НЕ setModal
и просто отслеживать созданного потомка, а затем переключать фокус ввода обратно на него, когда подходит время, вместо создания большого количества потерянных потомков.
Итак, я попытался сохранить fileview
, и я могу применить к нему методы, но я не знаю, какой из них вызывать, чтобы он появлялся поверх текущего окна и принимал фокус ввода.Я пробовал .setVisible(true)
и .setAlwaysOnTop(true)
(в надежде, что это хоть на мгновение делает это правдой!) Безрезультатно.... Я просмотрел все унаследованные классы, о которых мог подумать, что может иметь правильный метод, но не увидел его; Какие методы я должен применять?