Отключить кнопку сворачивания JFrame

Я разрабатываю инструмент для своего ноутбука. Я хочу отключить кнопку минимизации в JFrame. Я уже отключил кнопку развертывания и закрытия.

Вот код для отключения кнопки развертывания и закрытия:

JFrame frame = new JFrame();  
frame.setResizable(false); //Disable the Resize Button  
// Disable the Close button
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 

Подскажите, пожалуйста, как отключить кнопку сворачивания.


person Pankaj Kumar Thapa    schedule 28.10.2012    source источник
comment
Подскажите, пожалуйста, как отключить кнопку сворачивания. Пожалуйста, не делайте этого.   -  person Andrew Thompson    schedule 28.10.2012
comment
Какова настоящая цель GUI здесь? Это киоск?   -  person Andrew Thompson    schedule 28.10.2012
comment
отображать информацию о заряде аккумулятора пользователю на ноутбуке.   -  person Pankaj Kumar Thapa    schedule 28.10.2012
comment
Спасибо за объяснение. Как вы находите эту ценность в Java?   -  person Andrew Thompson    schedule 28.10.2012


Ответы (5)


Как правило, вы не можете, вы можете использовать JDialog вместо JFrame

person MadProgrammer    schedule 28.10.2012

Как сказал @MadProgrammer (+1 ему), это определенно не лучшая идея, которую вы бы предпочли

  • используйте JDialog и вызовите setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);, чтобы убедиться, что он не может быть закрыт.

  • Вы также можете использовать JWindow (от +1 до @M. M.) или вызвать setUndecorated(true); на своем JFrame экземпляре.

В качестве альтернативы вы можете добавить свой собственный WindowAdapater, чтобы сделать JFrame не минимизируемым и т. Д., Переопределив windowIconified(..) и вызвав setState(JFrame.NORMAL); из метода:

//necessary imports
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Test {

    /**
     * Default constructor for Test.class
     */
    public Test() {
        initComponents();
    }

    public static void main(String[] args) {

        /**
         * Create GUI and components on Event-Dispatch-Thread
         */
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Test test = new Test();
            }
        });
    }
    private final JFrame frame = new JFrame();

    /**
     * Initialize GUI and components (including ActionListeners etc)
     */
    private void initComponents() {
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        frame.setResizable(false);
        frame.addWindowListener(getWindowAdapter());

        //pack frame (size JFrame to match preferred sizes of added components and set visible
        frame.pack();
        frame.setVisible(true);
    }

    private WindowAdapter getWindowAdapter() {
        return new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent we) {//overrode to show message
                super.windowClosing(we);

                JOptionPane.showMessageDialog(frame, "Cant Exit");
            }

            @Override
            public void windowIconified(WindowEvent we) {
                frame.setState(JFrame.NORMAL);
                JOptionPane.showMessageDialog(frame, "Cant Minimize");
            }
        };
    }
}
person David Kroukamp    schedule 28.10.2012

Если вы не хотите разрешать какие-либо действия пользователя, используйте JWindow.

person Mordechai    schedule 28.10.2012
comment
См. Также API полноэкранного эксклюзивного режима. Если вы создаете приложение. которая рисует каждый пиксель на экране, это может быть очень удобно. - person Andrew Thompson; 28.10.2012

Вы можете попробовать изменить свой тип JFrame на UTILITY. Тогда вы не увидите в своей программе как минимизировать btn, так и максимизировать btn.

person Akila D. Perera    schedule 13.12.2015

Я бы порекомендовал вам использовать jframe.setUndecorated(true), поскольку вы не используете какие-либо оконные события и не хотите, чтобы размер приложения изменялся. Используйте созданную мной MotionPanel, если вы хотите переместить панель.

person Sorter    schedule 27.11.2012
comment
Люди по-прежнему могут свернуть JFrame, щелкнув значок на панели задач Windows ... - person Peter Gordon; 14.04.2014
comment
В этом случае вы сворачиваете в системный трей - person Sorter; 14.04.2014