2009-01-26 8 views
78

Je crée une animation rapide et sale en utilisant le swing. Je voudrais que la fenêtre soit maximisée. Comment puis je faire ça?JFrame Agrandir la fenêtre

Répondre

119

À condition que vous étendez JFrame:

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

C'est une mauvaise pratique d'accéder au champ statique à travers une instance. Utilisez 'JFrame.MAXIMIZED_BOTH' à la place. – nimcap

+3

@nimcap: Vous avez raison, j'ai modifié la réponse. – kgiannakakis

+2

énorme, bug massif et des problèmes avec ce qui précède! (Bon, d'accord, des avertissements mineurs sans conséquence majeure ...) Devraient être Frame.MAXIMIZED_BOTH pas JFrame.MAXIMIZED_BOTH! :) – Manius

12

si vous utilisez un JFrame, essayez cette

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

Quelque chose comme 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 Maximise, sauf pour la barre des tâches. Très utile. – Ben

+0

A quoi sert le '|' Fait-il un, et si cela échoue, il fait l'autre? Ou êtes-vous en train d'indiquer le choix du programmeur (c'est-à-dire choisir l'un des A | B à utiliser pour cet appel?) Je n'ai jamais vu cette syntaxe auparavant. – Pureferret

+0

@Pureferret c'est l'opérateur "bitwise OU inclusif", qui copie un bit s'il existe dans l'un ou l'autre opérande. (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html ou http://www.tutorialspoint.com/java/java_basic_operators.htm) – VonC

2

j'aime cette version:

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

J'aime cette version. Merci beaucoup. – SWIIWII

0

Je fini par utiliser ce code:

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

Cette option fonctionne le mieux de toutes les options, y compris plusieurs moniteurs. Le seul défaut que cela a est que le décalage de la barre des tâches est utilisé sur tous les moniteurs est certaines configurations.

Questions connexes