web-dev-qa-db-fra.com

Comment puis-je supprimer les boutons Agrandir et Réduire d'un JFrame?

Je dois supprimer les boutons d'agrandissement et de réduction d'un JFrame . S'il vous plaît suggérer comment faire cela.

17
silverkid
import Java.awt.event.WindowAdapter;
import Java.awt.event.WindowEvent;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Dlg extends JDialog {
    public Dlg(JFrame frame, String str) {
        super(frame, str);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        try {
            Dlg frame = new Dlg(new JFrame(), "No min max buttons");
            JPanel panel = new JPanel();
            panel.setSize(200, 200);
            JLabel lbl = new JLabel("blah blah");
            panel.add(lbl);
            frame.add(panel);
            frame.setSize(400, 400);
            frame.setVisible(true);
        } catch (IllegalArgumentException e) {
            System.exit(0);
        }
    }
}
6
stacker

Voici un exemple connexe utilisant setUndecorated() pour désactiver les décorations de cadre.

alt text

import Java.awt.EventQueue;
import Java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class FrameTest implements Runnable {

    public static void main(String[] args) {
        EventQueue.invokeLater(new FrameTest());
    }

    @Override
    public void run() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setUndecorated(true);
        JPanel panel = new JPanel();
        panel.add(new JLabel("Stackoverflow!"));
        panel.add(new JButton(new AbstractAction("Close") {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        }));
        f.add(panel);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}
14
trashgod

Remarque: j’avais initialement modifié la réponse de stacker , mais il a été suggéré de créer une nouvelle réponse à la place.

Il existe plusieurs façons de personnaliser les contrôles de fenêtre disponibles pour vos utilisateurs. 

Actuellement, le seul moyen de supprimer les boutons Agrandir et Réduire, tout en conservant la barre de titre et le bouton Fermer, consiste à utiliser un JDialog au lieu d'un JFrame:

import Java.awt.Dimension;
import Java.awt.event.WindowAdapter;
import Java.awt.event.WindowEvent;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class DialogDemo {

    public static void main(String[] args) {
        JDialog dialog = new JDialog(new JFrame(), "No min max buttons");
        // necessary as setDefaultCloseOperation(EXIT_ON_CLOSE) is 
        // not available for JDialogs.
        dialog.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                System.exit(0);
            }
        });

        JLabel label = new JLabel("blah blah");
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(400, 400));
        panel.add(label);

        dialog.add(panel);
        dialog.pack();
        dialog.setVisible(true);
    }
}

La solution de dialogue empêche les utilisateurs de minimiser et d’agrandir la fenêtre, y compris en utilisant des raccourcis, mais ne supprime toutefois pas la possibilité de redimensionner la fenêtre.

L'utilisation de setResizable(false) ne supprimera que le bouton d'agrandissement, au prix de l'impossibilité de redimensionner la fenêtre.

Enfin, comme mentionné par trashgod , la méthode setUndecorated(true) désactivera les décorations de cadre en supprimant la barre de titre et les bords de la fenêtre. Cela rend plus difficile pour les utilisateurs de faire glisser, redimensionner et fermer la fenêtre, bien que ce ne soit pas impossible, car ces actions peuvent toujours être effectuées à l'aide de touches de raccourci.

9
Daniel

Vous pouvez essayer ceci:

JFrame loadingDialog = new JFrame();

JLabel label = new JLabel("blah blah");
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(400, 400));
panel.add(label);

loadingDialog.add(panel);
loadingDialog.setUndecorated(true);

loadingDialog.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
                    loadingDialog.pack();

loadingDialog.setVisible(true);
0
Eason Xiao