webentwicklung-frage-antwort-db.com.de

Wie entferne ich die Schaltflächen zum Maximieren und Minimieren von einem JFrame?

Ich muss die Schaltflächen zum Maximieren und Minimieren aus einer JFrame entfernen. Bitte schlagen Sie vor, wie das geht.

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

Hier ist ein verwandtes Beispiel, in dem setUndecorated() zum Deaktivieren der Rahmendekorationen verwendet wird.

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

Hinweis: Ich habe ursprünglich die Antwort von stacker bearbeitet, aber es wurde vorgeschlagen, stattdessen eine neue Antwort zu erstellen.

Es gibt verschiedene Möglichkeiten, die für Ihre Benutzer verfügbaren Fenstersteuerelemente anzupassen.

Derzeit besteht die einzige Möglichkeit, die Schaltflächen zum Maximieren und Minimieren zu entfernen, während die Titelleiste und die Schaltfläche zum Schließen beibehalten werden, in der Verwendung einer JDialog anstelle einer 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);
    }
}

Die Dialoglösung macht es Benutzern unmöglich, das Fenster zu minimieren und zu maximieren, auch durch die Verwendung von Verknüpfungen. Die Möglichkeit, die Größe des Fensters zu ändern, wird jedoch nicht aufgehoben.

Mit setResizable(false) wird nur die Schaltfläche zum Maximieren entfernt, wenn die Fenstergröße nicht geändert werden kann.

Schließlich deaktiviert die Methode setUndecorated(true) , wie von trashgod erwähnt, die Rahmendekorationen und entfernt die Titelleiste und die Fensterkanten. Dies erschwert Benutzern das Ziehen, Ändern der Größe und Schließen des Fensters, obwohl dies nicht unmöglich ist, da diese Aktionen weiterhin mit Tastenkombinationen ausgeführt werden können.

9
Daniel

Sie können dies versuchen:

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