Удалить кнопку "X" в Swing JDialog - PullRequest
57 голосов
/ 03 июня 2009

Есть ли способ удалить кнопку закрытия ("X") из строки заголовка JDialog?

Ответы [ 6 ]

56 голосов
/ 03 июня 2009

Вы можете удалить весь заголовок диалога, вызвав dialog.setUndecorated (true), но это означает, что диалог больше не может быть перемещен.

Вы также можете выполнить dialog.setDefaultCloseOperation (WindowConstants.DO_NOTHING_ON_CLOSE), чтобы кнопка ничего не делала.

Кроме того, я не думаю, что есть способ полностью удалить X.

12 голосов
/ 03 июня 2009

Я считаю, что вы можете позвонить dialog.setUndecorated(true), чтобы удалить строку заголовка. Не уверен насчет только «Х».

Удаление «Х» может быть не очень хорошей идеей, поскольку вы хотите, чтобы пользователи могли легко закрывать диалоговое окно.

Лучше всего контролировать, что происходит, когда пользователи нажимают «X», используя dialog.setDefaultCloseOperation или WindowListener.

9 голосов
/ 27 сентября 2010

Начиная с 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.

4 голосов
/ 21 сентября 2016

Вот мой опыт:

  • Пробовал с помощью 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 голос
/ 03 июня 2009

В предположении, установите его в PL & F и удалите компонент по имени.

0 голосов
/ 20 июня 2012
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]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...