web-dev-qa-db-fra.com

JFrame en plein écran Java

Je ferai bientôt un projet et je devrai y utiliser le mode plein écran.

Il va dessiner des graphiques dans la fenêtre. Ce serait pratique si j'utilisais JFrame ou quelque chose de similaire. 

Je ne sais pas quelle sera la résolution finale de l'écran. S'il vous plaît dites-moi si les graphiques seront automatiquement redimensionnés?

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?
88
Yoda

Ajouter:

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

Si vous voulez mettre votre cadre en mode plein écran (comme un film en plein écran), vérifiez ces réponses.

Les classes Java.awt.GraphicsEnvironment et Java.awt.GraphicsDevice sont utilisées pour placer une application en mode plein écran sur un seul écran (le dispositif).

par exemple.:

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

}
33
Paul Vargas
9
Eng.Fouad

Une solution consiste à utiliser l'état étendu. Ceci demande au système d'exploitation sous-jacent de maximiser le JFrame.

setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);

Une autre approche serait de maximiser manuellement l’écran pour vos besoins. 

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

Mais cela présente des pièges dans le système d'exploitation Ubuntu. Le travail que j'ai trouvé était le suivant.

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

Dans Fedora, le problème ci-dessus n’est pas présent. Mais il existe des complications liées à Gnome ou KDE . Alors mieux vaut faire attention. J'espère que cela t'aides.

6
Chan

Il suffit d'utiliser ce code: 

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

J'espère que ça aide.

5
PeGiannOS

La solution la plus simple à ce jour:

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

Tout d’abord, c’est la résolution que vous voudriez utiliser, 1650,1080.

Maintenant, ajoutez:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

Si vous rencontrez des problèmes avec les composants de JFrame, après avoir ajouté tous les composants à l'aide de la méthode frame.add(component), ajoutez l'instruction suivante.

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

Cela fait juste le cadre la taille de l'écran

0
Sly

Les valeurs soulignaient ce que je veux dire:

! JFrame - Propriétés

0
Rudi Wijaya

Vous avez seulement besoin de ça:

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

Lorsque vous utilisez le modificateur MAXIMIZED_BOTH, la largeur de la fenêtre est maximale (hauteur et largeur).

Certains ont suggéré d'utiliser ceci:

frame.setUndecorated(true);

Je ne le recommanderai pas, car votre fenêtre n'aura pas d'en-tête, donc pas de bouton fermer/restaurer/réduire.

0
Kyon Perez