2009-01-26 22 views
78

Estoy armando una animación rápida y sucia utilizando swing. Me gustaría que la ventana se maximice. ¿Cómo puedo hacer eso?JFrame Maximizar ventana

Respuesta

119

condición de que usted está extendiendo JFrame:

public void run() { 
    MyFrame myFrame = new MyFrame(); 
    myFrame.setVisible(true); 
    myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH); 
} 
+13

Es una mala práctica acceder al campo estático a través de una instancia. Use 'JFrame.MAXIMIZED_BOTH' en su lugar. – nimcap

+3

@nimcap: Tiene razón, he editado la respuesta. – kgiannakakis

+2

¡Error enorme y masivo, y problemas con lo anterior! (Bueno, está bien, advertencias menores sin consecuencias importantes ...) Debe ser Frame.MAXIMIZED_BOTH not JFrame.MAXIMIZED_BOTH! :) – Manius

12

Si su uso de un JFrame, probar este

JFrame frame = new JFrame(); 
//... 
frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
17

Algo así 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); 
    } 
} 
+1

+1 Maximiza, excepto la barra de tareas. Muy útil. – Ben

+0

¿Para qué es '|'? ¿Hace uno, y si eso falla, el otro? ¿O está indicando la elección del programador (es decir, elige uno de A | B para ir en esta llamada?). No he visto esta sintaxis antes. – Pureferret

+0

@Pureferret es el operador "OR inclusivo a bit", que copia un bit si existe en cualquiera de los operandos. (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html o http://www.tutorialspoint.com/java/java_basic_operators.htm) – VonC

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); 
    } 
} 
+0

Me encanta esta versión. Muchas gracias. – SWIIWII

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 trabajaron la mejor de todas las opciones, incluida la compatibilidad con varios monitores. El único defecto que esto tiene es que la compensación de la barra de tareas se usa en todos los monitores en algunas configuraciones.

Cuestiones relacionadas