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

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

Вот код для отключения кнопки "Развернуть" и "Закрыть":

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

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

5 ответов

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

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

  • Вы также можете использовать JWindow (+1 к @MM) или позвоните 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");
            }
        };
    }
}

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

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

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

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

Другие вопросы по тегам