IT

전체 화면 Java의 JFrame

lottoking 2020. 8. 27. 21:21
반응형

전체 화면 Java의 JFrame


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

창에 그래픽이 그려집니다. 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?

더하다 :

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

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

클래스 클래스 는 앱을 한 화면 (디 포지티브)에서 전체 화면 모드로 전환하는 데 사용됩니다.java.awt.GraphicsEnvironmentjava.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);

}

setExtendedState(int state)상태가되는 것을 사용하십시오 .JFrame.MAXIMIZED_BOTH


한 가지 방법은 확장 상태를 사용하는 것입니다. 이 기본 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 와 관련된 복잡한 문제가 있습니다 . 그러니 조심하세요. 도움이 되었기를 바랍니다.


이 코드를 사용하십시오.

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

이게 도움이 되길 바란다.


가장 쉬운 수정 :

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

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

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);


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

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

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

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

frame.pack();

다음 만 필요합니다.

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

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

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

frame.setUndecorated(true);

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


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

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


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

JFrame-속성


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

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

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

참고 URL : https://stackoverflow.com/questions/11570356/jframe-in-full-screen-java

반응형