Ventana JFrame Maximizar

89

Estoy armando una animación rápida y sucia usando swing. Me gustaría maximizar la ventana. ¿Cómo puedo hacer eso?

No
fuente

Respuestas:

133

Siempre que esté ampliando JFrame:

public void run() {
    MyFrame myFrame = new MyFrame();
    myFrame.setVisible(true);
    myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}
kgiannakakis
fuente
13
Es una mala práctica acceder a un campo estático a través de una instancia. Úselo en su JFrame.MAXIMIZED_BOTHlugar.
nimcap
2
¡Error enorme, masivo y problemas con lo anterior! (Bueno, está bien, advertencias menores sin mayores consecuencias ...) ¡Debería ser Frame.MAXIMIZED_BOTH no JFrame.MAXIMIZED_BOTH! :)
Manius
¿Por qué llamas primero a setVisible (true)? ¿Es significativo? También funciona bien sin (ubuntu).
AvrDragon
1
Sin setVisible(true)primero, el marco no tiene el tamaño correcto. Lo probé tanto antes como después setExtendedState(), y setVisible()debo ser el primero.
mjibson
2
@Crusader Absolutamente ningún problema aquí en realidad, ya que ambos se refieren al mismo campo constante ( JFramehereda de Frame).
Guillaume Polet
18

Algo como this.setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH);

import java.awt.*;
import javax.swing.*;

public class Test extends JFrame
{
    public Test()
    {
        GraphicsEnvironment env =
GraphicsEnvironment.getLocalGraphicsEnvironment();
        this.setMaximizedBounds(env.getMaximumWindowBounds());
        this.setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH);
    }

    public static void main(String[] args)
    {
        JFrame.setDefaultLookAndFeelDecorated(true);

        Test t = new Test();
        t.setVisible(true);
    }
}
VonC
fuente
¿Para qué sirve |? ¿Hace uno, y si eso falla, hace el otro? ¿O está indicando la elección del programador (es decir, elija uno de A | B para participar en esta llamada?) No he visto esta sintaxis antes.
Pureferret
@Pureferret es el operador "OR inclusivo bit a bit", que copia un bit si existe en cualquiera de los operandos. ( docs.oracle.com/javase/tutorial/java/nutsandbolts/… o tutorialspoint.com/java/java_basic_operators.htm )
VonC
14

Si está utilizando un JFrame, intente esto

JFrame frame = new JFrame();
//...
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
user54579
fuente
2

me gusta esta versión:

import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.Toolkit;
import javax.swing.JFrame;

public class Test
{
    public static void main(String [] args)
    {
        final JFrame frame = new JFrame();
        final GraphicsConfiguration config = frame.getGraphicsConfiguration();

        final int left = Toolkit.getDefaultToolkit().getScreenInsets(config).left;
        final int right = Toolkit.getDefaultToolkit().getScreenInsets(config).right;
        final int top = Toolkit.getDefaultToolkit().getScreenInsets(config).top;
        final int bottom = Toolkit.getDefaultToolkit().getScreenInsets(config).bottom;

        final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        final int width = screenSize.width - left - right;
        final int height = screenSize.height - top - bottom;

        frame.setResizable(false);
        frame.setSize(width,height);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
        frame.setVisible(true);
    }
}
frame_max_show
fuente
Amo esta versión. Muchas gracias.
SWIIWII
2

La forma de configurar JFrame en pantalla completa es establecer la MAXIMIZED_BOTHopción que significa MAXIMIZED_VERT | MAXIMIZED_HORIZ, que respectivamente configura el marco para maximizar vertical y horizontalmente

package Example;
import java.awt.GraphicsConfiguration;
import javax.swing.JFrame;
import javax.swing.JButton;

public class JFrameExample
{
    static JFrame frame;
    static GraphicsConfiguration gc;
    public static void main(String[] args)
    {
        frame = new JFrame(gc);
        frame.setTitle("Full Screen Example");
        frame.setExtendedState(MAXIMIZED_BOTH);

        JButton button = new JButton("exit");
        b.addActionListener(new ActionListener(){@Override
        public void actionPerformed(ActionEvent arg0){
            JFrameExample.frame.dispose();
            System.exit(0);
        }});

        frame.add(button);
        frame.setVisible(true);
    }
}
Greg Reynolds
fuente
2

Probé las soluciones en este hilo y las de aquí , pero simplemente llamar setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);justo después de llamar setVisible(true);aparentemente no funciona para mi entorno (Windows 10, JDK 1.8, mi barra de tareas está en el lado derecho de mi pantalla). Hacerlo de esta manera todavía deja un pequeño espacio a la izquierda, derecha e inferior.

Sin embargo, lo que funcionó para mí es llamar setExtendedState(...cuando la ventana está activada, así:

public class SomeFrame extends JFrame {

    public SomeFrame() {
        // ...
        setVisible(true);
        setResizable(true);
        // if you are calling setSize() for fallback size, do that here
        addWindowListener (
            new WindowAdapter() {
                private boolean shown = false;
                @Override
                public void windowActivated(WindowEvent we) {
                    if(shown) return;
                    shown = true;
                    setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
                }
            }
        );
    }
}
TT.
fuente
1
Tuve un problema similar en Windows 10 con la barra de tareas en la parte inferior de la pantalla. La ventana era demasiado alta y, por lo tanto, la barra de tareas estaba superpuesta. ¡Tu solución funcionó!
ConveniencePatterns
0

Terminé usando este código:

public void setMaximized(boolean maximized){
    if(maximized){
        DisplayMode mode = this.getGraphicsConfiguration().getDevice().getDisplayMode();
        Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(this.getGraphicsConfiguration());
        this.setMaximizedBounds(new Rectangle(
                mode.getWidth() - insets.right - insets.left, 
                mode.getHeight() - insets.top - insets.bottom
        ));
        this.setExtendedState(this.getExtendedState() | JFrame.MAXIMIZED_BOTH);
    }else{
        this.setExtendedState(JFrame.NORMAL);
    }
}

Esta opción funcionó mejor de todas las opciones, incluida la compatibilidad con varios monitores. El único defecto que tiene esto es que el desplazamiento de la barra de tareas se utiliza en todos los monitores en algunas configuraciones.

Wouter
fuente
0

La respuesta de @kgiannakakis es completamente correcta, pero si alguien se atasca en este problema y usa Java 6 en Linux (por ejemplo, Mint 19 Cinnamon), el estado MAXIMIZED_BOTH a veces no se aplica.

Puede intentar llamar al método pack () después de establecer este estado.

Ejemplo de código:

public MainFrame() {
    setContentPane(contentPanel); //some JPanel is here
    setPreferredSize(new Dimension(1200, 800));
    setMinimumSize(new Dimension(1200, 800));
    setSize(new Dimension(1200, 800));
    setExtendedState(JFrame.MAXIMIZED_BOTH);
    pack();
}

Esto no es necesario si está utilizando Java 7+ o Java 6 en Windows.

caminante de sueños
fuente