Вот альтернативный / чуть более подробный ответ.
Попробуйте Вы пропустили кнопку увеличения? ( ранее здесь ). Это github архив статей и кода блога Сантоша Кумара Тектури с ныне несуществующего сайта JRoller.
Это полный служебный класс, который делает Frame похожим на другие ответы. Он включает добавление WindowListener
к фрейму, чтобы оставить фрейм поверх его владельца и оставить фрейм его владельца отключенным (предупреждение: в методе windowClosed
это, вероятно, должно быть frame.removeWindowListener(this);
и WindowListener
для владельца чтобы держать фрейм поверх него и удалить слушателя. Он также использует свой собственный EventQueue
для обработки событий. Обратите внимание, что это старая запись, так как, как упоминалось в коде, могут быть более новые API для более эффективной работы с этим кодом. .
Вот основная функция. Смотрите ссылку для отдыха. Примечание: код в хранилище отличается от статьи; Я считаю, что хранилище более развито.
// show the given frame as modal to the specified owner.
// NOTE: this method returns only after the modal frame is closed.
public static void showAsModal(final Frame frame, final Frame owner){
frame.addWindowListener(new WindowAdapter(){
public void windowOpened(WindowEvent e){
owner.setEnabled(false);
}
public void windowClosing(WindowEvent e) {
owner.setEnabled(true);
}
public void windowClosed(WindowEvent e){
frame.removeWindowListener(this); // originally called on owner
}
});
owner.addWindowListener(new WindowAdapter(){
public void windowActivated(WindowEvent e){
if(frame.isShowing()){
frame.setExtendedState(JFrame.NORMAL);
frame.toFront();
}else
owner.removeWindowListener(this);
}
});
owner.toFront();
frame.setVisible(true);
try{
new EventPump(frame).start();
} catch(Throwable throwable){
throw new RuntimeException(throwable);
}
}