Есть ли способ удалить кнопку закрытия («X») из строки заголовка JDialog
?Удалить кнопку «X» в Swing JDialog
ответ
Угадайте, установите его как PL & F украсил и удалил компонент по названию.
Что такое PL & F? Благодарю. – kenshinji
PL & F является подключаемым Look & Feel. Уродливый способ Swing может взять на себя произвольный Look & Feel. –
Почему уродливый? Какой был бы правильный способ сделать это? –
Вы можете удалить весь заголовок диалога, вызвав dialog.setUndecorated (true), но это означает, что диалог больше не может быть перемещен.
Вы также можете выполнить dialog.setDefaultCloseOperation (WindowConstants.DO_NOTHING_ON_CLOSE), чтобы эта кнопка ничего не делала.
Кроме того, я не думаю, что есть способ полностью удалить X.
Я считаю, что вы можете позвонить dialog.setUndecorated(true)
, чтобы удалить строку заголовка. Не уверен только о «Х».
Удаление «X» может быть отличной идеей, поскольку вы хотите, чтобы ваши пользователи могли легко закрыть диалоговое окно.
Лучше всего контролировать то, что происходит, когда пользователи нажимают кнопку «X», используя dialog.setDefaultCloseOperation
или WindowListener
.
Начиная с Java 1.7 (AKA Dolphin или Java 7), вы не можете отключить или закрыть кнопку закрытия в окне. Вы можете удалить/отключить кнопку максимизации с помощью frame.setResizable(false)
, и вы можете удалить кнопки минимизации и максимизации, используя java.awt.Dialog
или класс, который расширяет его, например javax.swing.JDialog
. Вы можете удалить строку заголовка, границы и кнопки с помощью frame.setUndecorated(true)
, и вы можете полностью контролировать видимость всех кнопок в строке заголовка (при потере некоторой межплатформенной совместимости и интеграции ОС) с frame.setDefaultLookAndFeelDecorated(true)
(при условии, что это JFrame или JDialog). Это все, что я вижу в текущем JDK.
Это «не будет исправлено» на [параде ошибок] (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5085932). –
Это не совсем правильно. Подклассификация/создание JDialog на OS X (проверено на El Capitan) не удаляет никаких кнопок из заголовка, а также не содержит никакой комбинации настроек (и да, я пробовал каждую комбинацию). Только 'setUndecorated (true)' удаляет их все, но вместе с ним идет строка заголовка. Вы можете, конечно, изменить поведение кнопок панели заголовка, но что касается внешнего вида ...это очень сложная ситуация, когда я потратил слишком много времени на неудовлетворительные решения и не переносимый код. – EntangledLoops
@EntangledLoops Спасибо, что внесли свой комментарий! Хотя это правда, что JDialog не отменяет кнопки «Свернуть /« максимизировать »в диалоговом окне OS X, он отключает минимизацию. У меня нет Mac на руках, чтобы проверить это, но я готов поспорить, что кнопка максимизации просто изменяет ее размеры, и если вы установите 'dialog.setResizable (false)', зеленая кнопка также отключится! Во всяком случае, как я сказал в своем ответе, это расстраивает то, что мы не имеем полного контроля над этим, но я могу себе представить, как кошмарные могут быть для разработчиков JSE для программирования на всех платформах. ; 3 – Supuhstar
static public void removeButtons(Component c){
if (c instanceof AbstractButton){
String accn = c.getAccessibleContext().getAccessibleName();
Container p=c.getParent();
//log.debug("remove button %s from %s",accn,p.getClass().getName());
c.getParent().remove(c);
}
else if (c instanceof Container){
//log.debug("processing components of %s",c.getClass().getName());
Component[] comps = ((Container)c).getComponents();
for(int i = 0; i<comps.length; ++i)
removeButtons(comps[i]);
}
}
это приведет к удалению любых кнопок, добавленных в диалог, а не кнопок закрытия диалогового окна. –
Это не влияет на кнопки заголовка (OS X). – EntangledLoops
Это на самом деле довольно забавно и оставляет ваше приложение в непринужденном состоянии, если вы _ever_ используете кнопки x3 – Supuhstar
Вот мой опыт:
- Пробовал с помощью
setUndecorated(true)
: Сделано всеDialog
невидимым. - Пробовал
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)
: Это не изменило поведение вообще. Мое диалоговое окно все еще закрыто. Установка операции закрытия по умолчанию наDO_NOTHING_ON_CLOSE
делегирует операцию закрытия операцииwindowClosing()
зарегистрированногоWindowListener
.
То, что сработало для меня было:
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
//Remove any existing WindowListeners
for (WindowListener wl : this.getWindowListeners())
this.removeWindowListener(wl);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
if ("Optional condition") {
JOptionPane.showMessageDialog(null, "You cannot close this window");
}
}
});
- 1. Пользовательский курсор в Swing JDialog
- 2. RadioButtons в JDialog в Swing?
- 3. Java Swing [JDialog]
- 4. Как использовать JDialog в графическом интерфейсе Swing?
- 5. swing: установка курсора на JDialog
- 6. настройка Swing JDialog для немодальных
- 7. Позиционирование JDialog появится под JTextField в Swing?
- 8. NetBeans & Swing - динамически добавлять JPanel в JDialog
- 9. Java/Swing - как уменьшить размер конструктора JDialog?
- 10. Swing TextArea с панелью прокрутки на JDialog
- 11. Java Swing. Windows перед запуском из JDialog
- 12. Swing: Как закрыть JDialog программно с контроллера?
- 13. Swing - Как изменить цвет фона Jframe/Jdialog
- 14. Программно закрывающееся отображение Java Swing JDialog
- 15. Swing: установить фиксированный размер окна для JDialog
- 16. Как установить FilterExtensions для Swing JDialog?
- 17. Swing JDialog медленный при работе удаленно
- 18. Java Swing - JDialog фокус по умолчанию
- 19. Удалить кнопку "X" в конце TextBox
- 20. JDialog не показывает кнопку свернуть/закрыть
- 21. Как показать JDialog до System.exit() в Java Swing? (Закрыто)
- 22. JDialog не закрывается нажатием кнопки «X»
- 23. JDialog: удалить заголовок, сохранить границу
- 24. Кнопка отмены JDialog
- 25. Создайте jDialog Swing с сообщением об ошибке с изображением
- 26. Как удалить кнопку x из jQuery-плагина
- 27. Невозможно отключить кнопку кадра от JDialog
- 28. Скрыть/Просто закрыть Jdialog при нажатии X
- 29. JDialog - Как сделать ключевой отклик на кнопку фокуса на диалог
- 30. Как открыть форму JDialog в netbeans?
Я видел некоторые приложения, которые показывают другое диалоговое окно при нажатии на кнопку закрытия, сообщающее, нажать одну из других кнопок вместо этого. Genius! –