JFrame en Java plein écran
je vais bientôt faire un projet et je vais devoir utiliser le mode plein écran .
il dessinera quelques graphiques dans la fenêtre. Il serait souhaitable que j'utilise 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 la graphicss sera automatiquement redimensionnée?
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?
10 réponses
ajouter:
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);
frame.setVisible(true);
Si vous voulez mettre votre image en mode plein écran (comme un film en plein écran), vérifiez ces réponses.
- Comment puis-je faire le plein écran en Java sur mac OSX
- Java setFullScreenWindow() garder sur le dessus
les classes java.awt.GraphicsEnvironment
et java.awt.GraphicsDevice
sont utilisées pour mettre une application en mode plein écran sur un écran (le dispositif).
p.ex.:
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);
}
Utilisation setExtendedState(int state)
, les cas où l'état serait JFrame.MAXIMIZED_BOTH
.
Une façon est d'utiliser l'État Étendu. Cela demande au système d'exploitation sous-jacent de maximiser le JFrame.
setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
autre approche serait de maximiser manuellement l'écran pour votre exigence.
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(100, 100, (int) dim.getWidth(), (int) dim.getHeight());
setLocationRelativeTo(null);
Mais cela a des pièges dans Ubuntu OS. Le travail autour, j'ai trouvé était présent.
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 ya des complications en cause avec Gnome ou KDE . Donc mieux vaut être prudent. Espérons que cette aide.
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 cela aidera.
la solution la plus facile de tous les temps:
for (Window w : Window.getWindows()) {
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(w);
}
il vous aidera à utiliser l'instant de votre objet de la trame
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
tout d'Abord, c'est la résolution que vous souhaitez utiliser, 1650,1080
.
ajouter maintenant:
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
si vous avez des problèmes avec les composants sur la JFrame, puis après avoir ajouté tous les composants en utilisant la méthode frame.add(component)
, ajouter l'énoncé suivant.
frame.pack();
mettre 2 propriétés ci-dessous:
- extendedState = 6
- redimensionnables = true
ça me va.