JFrame 최대화 창


89

스윙을 사용하여 빠르고 더러운 애니메이션을 구성하고 있습니다. 창을 최대화하고 싶습니다. 어떻게 할 수 있습니까?

답변:


133

JFrame을 확장하는 경우 :

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

13
인스턴스를 통해 정적 필드에 액세스하는 것은 좋지 않습니다. JFrame.MAXIMIZED_BOTH대신 사용하십시오 .
nimcap 2010

2
거대하고 거대한 버그와 위의 문제! (글쎄, 괜찮아, 큰 결과가없는 사소한 경고 ...) JFrame.MAXIMIZED_BOTH가 아닌 Frame.MAXIMIZED_BOTH 여야합니다! :)
Manius

setVisible (true)을 먼저 호출하는 이유는 무엇입니까? 중요합니까? (ubuntu) 없이도 잘 작동합니다.
AvrDragon 2012 년

1
없이 setVisible(true)첫째, 프레임이 제대로 크기되지 않습니다. 나는 전과 후 모두 시도 setExtendedState()하고 setVisible()먼저해야합니다.
mjibson dec.

2
@Crusader 둘 다 동일한 상수 필드 ( JFrame에서 상 속됨)를 참조하기 때문에 실제로 여기서는 문제가되지 않습니다 Frame.
Guillaume Polet

18

같은 것 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);
    }
}

무엇입니까 |? 하나를 수행하고 실패하면 다른 하나를 수행합니까? 아니면 프로그래머 선택을 표시하고 있습니까 (즉, A | B 중 하나를 선택하여이 호출에 포함됩니까?).이 구문을 본 적이 없습니다.
Pureferret 2013

@Pureferret은 "비트 포함 OR"연산자로, 피연산자 중 하나에 있으면 비트를 복사합니다. ( docs.oracle.com/javase/tutorial/java/nutsandbolts/… 또는 tutorialspoint.com/java/java_basic_operators.htm )
VonC 2013

14

JFrame을 사용하는 경우 다음을 시도하십시오.

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


2

나는이 버전을 좋아한다 :

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

나는이 버전을 좋아한다. 정말 고맙습니다.
SWIIWII

2

JFrame을 전체 화면으로 설정하는 방법은를 MAXIMIZED_BOTH나타내는 옵션 을 설정하는 것입니다.이 옵션은 MAXIMIZED_VERT | MAXIMIZED_HORIZ각각 프레임을 세로 및 가로로 최대화하도록 설정합니다.

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

이 스레드의 솔루션과 여기 에있는 솔루션을 시도 했지만 호출 setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);직후 호출하는 것만 setVisible(true);으로도 내 환경에서 작동하지 않습니다 (Windows 10, JDK 1.8, 내 작업 표시 줄이 화면 오른쪽에 있음). 이렇게하면 여전히 왼쪽, 오른쪽 및 아래쪽에 작은 공간이 남습니다.

그러나 나를 위해 일한 setExtendedState(...것은 창이 활성화 될 때 다음과 같이 호출 됩니다.

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
화면 하단의 작업 표시 줄과 함께 Windows 10에서 비슷한 문제가 발생했습니다. 창이 너무 높아서 작업 표시 줄과 겹쳤습니다. 솔루션이 작동했습니다!
ConveniencePatterns

0

이 코드를 사용하여 끝났습니다.

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

이 옵션은 다중 모니터 지원을 포함하여 모든 옵션 중에서 가장 잘 작동했습니다. 유일한 결점은 모든 모니터에서 작업 표시 줄 오프셋이 일부 구성에 사용된다는 것입니다.


0

@kgiannakakis 대답은 완전히 정확하지만 누군가이 문제에 빠져 Linux에서 Java 6사용하는 경우 (예 : Mint 19 Cinnamon), MAXIMIZED_BOTH 상태는 때때로 적용되지 않습니다.

pack () 을 호출 할 수 있습니다.이 상태를 설정 한 후 메서드 있습니다.

코드 예 :

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

Windows에서 Java 7+ 또는 Java 6을 사용하는 경우에는 필요하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.