JFrame в полноэкранном режиме Java

Я буду делать проект в ближайшее время, и мне придется использовать в нем полноэкранный режим.

Это нарисует некоторую графику в окне. Было бы удобно, если бы я использовал 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?

14 ответов

Решение

Добавлять:

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

Если вы хотите перевести рамку в полноэкранный режим (например, в полноэкранный фильм), проверьте эти ответы.

Классы 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);

}

Использование setExtendedState(int state) где государство будет JFrame.MAXIMIZED_BOTH,

Одним из способов является использование расширенного состояния. Это просит основную ОС максимизировать 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. Так что будь осторожен. Надеюсь это поможет.

Самое простое решение:

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

Просто используйте этот код:

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

Надеюсь, это поможет.

Вам нужно только это:

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

Когда вы используете модификатор MAXIMIZED_BOTH, он будет максимальным по всему окну (высота и ширина).

Есть некоторые, которые предложили использовать это:

frame.setUndecorated(true);

Я не буду рекомендовать это, потому что у вашего окна не будет заголовка, поэтому нет кнопки закрытия / восстановления / сворачивания.

Это поможет вам использовать ваш объект мгновенно из кадра

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

Прежде всего, это разрешение, которое вы хотели бы использовать, 1650,1080,

Теперь добавьте:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

Если у вас есть проблемы с компонентами в JFrame, то после добавления всех компонентов, используя frame.add(component) метод, добавьте следующее утверждение.

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

Это просто делает рамку размером экрана

Вы можете использовать инструмент свойств.
Установите 2 свойства для вашего JFrame:

extendedState 6
resizeable    true

Значения выделены, что я имею в виду:

! JFrame - Недвижимость

Установите 2 свойства ниже:

  1. extendedState = 6
  2. resizeable = true

Меня устраивает.

можно просто сделать вот так -

      public void FullScreen() {
        if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
            final View v = this.activity.getWindow().getDecorView();
            v.setSystemUiVisibility(8);
        }
        else if (Build.VERSION.SDK_INT >= 19) {
            final View decorView = this.activity.getWindow().getDecorView();
            final int uiOptions = 4102;
            decorView.setSystemUiVisibility(uiOptions);
        }
    }
Другие вопросы по тегам