전체 화면 Java의 JFrame


110

곧 프로젝트를 진행할 예정이며 전체 화면 모드 를 사용해야 합니다.

창에 그래픽이 그려집니다. JFrame 이나 비슷한 것을 사용하면 편리 할 것 입니다.

화면의 최종 해상도가 어떻게 될지 모르겠습니다. 그래픽이 자동으로 크기가 조정되는지 알려주세요.

JFrame jf = new JFrame();
jf.setSize(1650,1080);
//make it fullscreen;
//now is everything is going to be rescaled so it looks like the original?

"전체 화면"을 정의해야합니다. 아래 답변과 함께 프레임을 장식해야하는지 여부를 고려할 수 있습니다 (제목 표시 줄 및 테두리 포함). 사용자 지정 페인팅을 수행하지 않는 한 크기 조정이 발생하지 않습니다. 일반 스윙 구성 요소와 레이아웃 관리자를 사용하는 경우 레이아웃이 새 화면 해상도에 맞게 조정된다는 것을 알 수 있습니다. 물론 테스트하고 싶을 것입니다;)
— MadProgrammer 2012

Lion 전체 화면을 사용 하시겠습니까?
— LanguagesNamedAfterCofee

답변:


206

더하다:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
frame.setUndecorated(true);
frame.setVisible(true);

52
또한 frame.setUndecorated(true);진정한 전체 화면으로 만들 것입니다.
— Yoda

GNU / Linux를 사용 하는 경우 새 디스플레이 모드 를 설정 DisplayMode.BIT_DEPTH_MULTI하고 DisplayMode.REFRESH_RATE_UNKNOWN적용 해야 할 수 있습니다. 을 사용할 필요가 없었습니다 setExtendedState. Java 8과 함께 Kubuntu 15.10을 사용하여 작업을 테스트했습니다.
— code_dredd

Java8을 사용하고 있습니다. 장식되지 않은 예외가 발생하고 장식되지 않은 코드를 제거하면 코드가 제대로 작동하고 프레임을 전체 화면으로 만들었습니다.
— shaILU

오류와 이유를 알려 드리겠습니다. 하나의 AppFrame 클래스 (일부 기본 속성 포함)를 만들고 모든 클래스를 JFrame으로 만들기 위해 간단히 확장합니다. 그것은 true로 setVisible을 가지고 있습니다. 이제 세 줄 위의 순서는 동일해야합니다. 표시가 ExtendedState 이전에 있으면 아래 오류가 발생합니다. 내가 수정하면 주문 오류가 사라 당신은 어떤 제목 표시 줄에 JFrame의를 얻을 .........Exception in thread "main" java.awt.IllegalComponentStateException: The frame is displayable. at java.awt.Frame.setUndecorated(Frame.java:923)
— shaILU

기호가있는 새로운 질문에 모든 것을 넣어 @shaILU 최소한의 재현 예
— Reimeus

39

프레임을 전체 화면 모드 (예 : 전체 화면의 영화)로 설정하려면 다음 답변을 확인하십시오.

클래스 java.awt.GraphicsEnvironment및 클래스 java.awt.GraphicsDevice는 앱을 한 화면 (디 포지티브)에서 전체 화면 모드로 전환하는 데 사용됩니다.

예 :

static GraphicsDevice device = GraphicsEnvironment
        .getLocalGraphicsEnvironment().getScreenDevices()[0];

public static void main(String[] args) {

    final JFrame frame = new JFrame("Display Mode");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setUndecorated(true);

    JButton btn1 = new JButton("Full-Screen");
    btn1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            device.setFullScreenWindow(frame);
        }
    });
    JButton btn2 = new JButton("Normal");
    btn2.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            device.setFullScreenWindow(null);
        }
    });

    JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    panel.add(btn1);
    panel.add(btn2);
    frame.add(panel);

    frame.pack();
    frame.setVisible(true);

}

@Paul Vargas : 장식되지 않은 창에 메뉴 모음을 추가 할 수도 있습니다. 종료하려면 "alt + F4"를 입력해야합니다.
— cardman


7

한 가지 방법은 확장 상태를 사용하는 것입니다. 이것은 기본 OS에 JFrame을 최대화하도록 요청합니다.

setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);

다른 접근 방식은 요구 사항에 맞게 화면을 수동으로 최대화하는 것입니다.

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(100, 100, (int) dim.getWidth(), (int) dim.getHeight());
setLocationRelativeTo(null);

그러나 이것은 Ubuntu OS에 함정이 있습니다. 내가 찾은 일은 이것이었다.

if (SystemHelper.isUnix()) {
    getContentPane().setPreferredSize(
    Toolkit.getDefaultToolkit().getScreenSize());
    pack();
    setResizable(false);
    show();

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            Point p = new Point(0, 0);
            SwingUtilities.convertPointToScreen(p, getContentPane());
            Point l = getLocation();
            l.x -= p.x;
            l.y -= p.y;
            setLocation(p);
        }
    });
}

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(100, 100, (int) dim.getWidth(), (int) dim.getHeight());
setLocationRelativeTo(null);

Fedora에서는 위의 문제가 없습니다. 그러나 Gnome 또는 KDE 와 관련된 복잡한 문제가 있습니다 . 그러니 조심하세요. 도움이 되었기를 바랍니다.


6

가장 쉬운 수정 :

for ( Window w : Window.getWindows() ) {
    GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow( w );
}

d frame.setExtendedState(JFrame.MAXIMIZED_BOTH);와 솔루션 의 차이점은 무엇입니까 ?
— Yoda

솔루션을위한 프레임이 있어야합니다. 광산 반면 당신은하지 않습니다 그것은 자동으로 프로그램의 모든 창을 통해 루프
— 아리엘 Terrani

잘 했어. 이 수정은 macOS에서 더 잘 작동합니다. 다른 수정은 여전히 ​​메뉴 막대를 계속 표시하기 때문입니다. 이 수정은 모든 것을 완전히 숨 깁니다. 이것은 받아 들여진 대답이어야합니다.
— Panayotis

5

이 코드를 사용하십시오.

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

public class FullscreenJFrame extends JFrame {
    private JPanel contentPane = new JPanel();
    private JButton fullscreenButton = new JButton("Fullscreen Mode");
    private boolean Am_I_In_FullScreen = false;
    private int PrevX, PrevY, PrevWidth, PrevHeight;

    public static void main(String[] args) {
        FullscreenJFrame frame = new FullscreenJFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 500);
        frame.setVisible(true);
    }

    public FullscreenJFrame() {
        super("My FullscreenJFrame");

        setContentPane(contentPane);

        // From Here starts the trick
        FullScreenEffect effect = new FullScreenEffect();

        fullscreenButton.addActionListener(effect);

        contentPane.add(fullscreenButton);
        fullscreenButton.setVisible(true);
    }

    private class FullScreenEffect implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            if (Am_I_In_FullScreen == false) {
                PrevX = getX();
                PrevY = getY();
                PrevWidth = getWidth();
                PrevHeight = getHeight();

                // Destroys the whole JFrame but keeps organized every Component
                // Needed if you want to use Undecorated JFrame dispose() is the
                // reason that this trick doesn't work with videos.
                dispose();
                setUndecorated(true);

                setBounds(0, 0, getToolkit().getScreenSize().width,
                        getToolkit().getScreenSize().height);
                setVisible(true);
                Am_I_In_FullScreen = true;
            } else {
                setVisible(true);
                setBounds(PrevX, PrevY, PrevWidth, PrevHeight);
                dispose();
                setUndecorated(false);
                setVisible(true);
                Am_I_In_FullScreen = false;
            }
        }
    }
}

이게 도움이 되길 바란다.


2

그것은 당신이 프레임의 순간에 당신의 개체를 사용하는 데 도움이 될 것입니다

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);


2

우선 사용하려는 해상도 인 1650,1080.

이제 다음을 추가하십시오.

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

JFrame의 구성 요소에 문제가있는 경우 frame.add(component)메서드를 사용하여 모든 구성 요소를 추가 한 후 다음 문을 추가합니다.

frame.pack();

1
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));

이것은 프레임을 화면 크기로 만듭니다.


1

속성 도구를 사용할 수 있습니다. JFrame에
대해 2 개의 속성을 설정합니다 .

extendedState 6
resizeable    true

0

다음 만 필요합니다.

JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

MAXIMIZED_BOTH 수정자를 사용하면 창 전체 (높이 및 너비)에서 최대 값이됩니다.

이것을 사용하여 제안한 몇 가지가 있습니다.

frame.setUndecorated(true);

창에 헤더가 없으므로 닫기 / 복원 / 최소화 버튼이 없으므로 권장하지 않습니다.


0

강조 표시된 값은 다음을 의미합니다.

JFrame-속성


그림이 암묵적으로 대답을 제공 할 수 있지만, 몇 가지 설명과 함께 대답을 정교하게 작성하십시오. imho,하지만 당신의 대답은 실제로는 기존의 대답과 같기 때문에이 대답을 정말로 정교화하고 유지할 것인지 아닌지 신중하게 생각하십시오.
— Yohanes Khosiawan 许先汉

-1

아래 2 개의 속성을 설정합니다.

  1. extendedState = 6
  2. 크기 조정 가능 = true

그것은 나를 위해 작동합니다.


2
최종 통계에는 이유가 있습니다.
— Yoda 2014

흠 ...에서 넷빈즈 8.0.1 나는 "크기를 조정할 수"+ "크기를 조정할 수"속성 값 (속성 창)에 대한 JFrame의를 설정할 수 있습니다
— 루디 자야
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.