JFrame Maximize a janela


90

Estou montando uma animação rápida e suja usando swing. Eu gostaria que a janela fosse maximizada. Como eu posso fazer isso?

Respostas:


134

Desde que você esteja estendendo o JFrame:

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

13
É uma má prática acessar o campo estático por meio de uma instância. Use em seu JFrame.MAXIMIZED_BOTHlugar.
nimcap

3
Bug enorme e enorme e problemas com o acima! (Bem, tudo bem, pequenos avisos sem grandes consequências ...) Deve ser Frame.MAXIMIZED_BOTH e não JFrame.MAXIMIZED_BOTH! :)
Manius

Por que você chama setVisible (true) primeiro? Isso é significativo? Ele também funciona bem sem (ubuntu).
AvrDragon

1
Sem setVisible(true)primeiro, o quadro não é dimensionado corretamente. Tentei antes e depois setExtendedState(), e setVisible()devo ser o primeiro.
mjibson

2
@Crusader Absolutamente nenhum problema aqui, já que ambos se referem ao mesmo campo constante ( JFrameherda de Frame).
Guillaume Polet de

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

Para que serve |? Ele faz um e, se falhar, ele faz o outro? Ou você está indicando a escolha do programador (ou seja, escolha um de A | B para ir nesta chamada?) Eu nunca vi essa sintaxe antes.
Pureferret de

@Pureferret é o operador "OR inclusivo bit a bit", que copia um bit se ele existir em qualquer um dos operandos. ( docs.oracle.com/javase/tutorial/java/nutsandbolts/… ou tutorialspoint.com/java/java_basic_operators.htm )
VonC

14

Se você estiver usando um JFrame, tente este

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


2

eu gosto desta versão:

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

Eu amo essa versão. Muito obrigado.
SWIIWII

2

A maneira de definir JFrame para tela inteira é definir a MAXIMIZED_BOTHopção que representa MAXIMIZED_VERT | MAXIMIZED_HORIZ, que, respectivamente, define o quadro para maximizar vertical e 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);
    }
}

2

Tentei as soluções neste tópico e aqui , mas simplesmente chamar setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);logo após chamar setVisible(true);aparentemente não funciona para o meu ambiente (Windows 10, JDK 1.8, minha barra de tarefas está no lado direito da tela). Fazer dessa forma ainda deixa um pequeno espaço à esquerda, direita e parte inferior.

O que funcionou para mim, no entanto, é chamar setExtendedState(...quando a janela é ativada, assim:

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

1
Tive um problema semelhante no Windows 10 com a barra de tarefas na parte inferior da tela. A janela era muito alta e, portanto, sobreposta pela barra de tarefas. Sua solução funcionou!
ConveniencePatterns

0

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

Essas opções funcionaram melhor de todas as opções, incluindo suporte a vários monitores. A única falha que isso tem é que o deslocamento da barra de tarefas é usado em todos os monitores em algumas configurações.


0

A resposta @kgiannakakis está totalmente correta, mas se alguém se deparou com esse problema e usa Java 6 no Linux (por exemplo, Mint 19 Cinnamon), o estado MAXIMIZED_BOTH às vezes não é aplicado.

Você pode tentar chamar o método pack () após definir este estado.

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

Isso não é necessário se você estiver usando Java 7 ou Java 6 no Windows.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.