java - ventana - ¿Cómo elimino los botones de maximizar y minimizar de un JFrame?
quitar los botones de minimizar y maximizar en java (4)
Necesito eliminar los botones de maximizar y minimizar de un JFrame
. Por favor sugiera cómo hacer esto.
Aquí hay un ejemplo relacionado que usa setUndecorated()
para deshabilitar las decoraciones del marco.
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("!"));
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);
}
}
Puedes probar esto:
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);
Nota: Inicialmente la respuesta del , pero se sugirió que creara una nueva respuesta en su lugar.
Hay algunas formas de personalizar los controles de ventana disponibles para sus usuarios.
Actualmente, la única forma de eliminar los botones de maximizar y minimizar, manteniendo la barra de título y el botón de cerrar, es usar un JDialog
lugar de 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 solución de diálogo hace que sea imposible para los usuarios minimizar y maximizar la ventana, incluso mediante el uso de accesos directos, sin embargo, no elimina la capacidad de cambiar el tamaño de la ventana.
El uso de setResizable(false)
eliminará el botón de maximizar, al costo de no poder cambiar el tamaño de la ventana.
Finalmente, como lo menciona trashgod , el setUndecorated() deshabilitará las decoraciones del marco, eliminando la barra de título y los bordes de las ventanas. Esto hace que sea más difícil para los usuarios arrastrar, redimensionar y cerrar la ventana, aunque no es imposible, ya que estas acciones aún se pueden realizar con las teclas de acceso directo.
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);
}
}
}