JFrame a schermo intero Java

Farò presto un progetto e dovrò utilizzare la modalità a schermo intero.

Disegnerà alcuni elementi grafici nella finestra. Sarebbe comodo se usassi JFrame o qualcosa di simile.

Non so quale sarà la risoluzione finale dello schermo. Per favore, dimmi se la grafica verrà automaticamente riscalata?

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? 

Inserisci:

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

Se vuoi mettere il tuo frame in modalità a schermo intero (come un film a schermo intero), controlla queste risposte.

  • Come posso fare a schermo intero in Java su OSX
  • Java setFullScreenWindow () continua

Le classi java.awt.GraphicsEnvironment e java.awt.GraphicsDevice vengono utilizzate per mettere un’app in modalità a schermo intero su un’unica schermata (il dispositivo).

per esempio:

 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 actionPerformsd(ActionEvent e) { device.setFullScreenWindow(frame); } }); JButton btn2 = new JButton("Normal"); btn2.addActionListener(new ActionListener() { @Override public void actionPerformsd(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); } 

Usa setExtendedState(int state) , dove lo stato sarebbe JFrame.MAXIMIZED_BOTH .

Un modo è utilizzare lo stato esteso. Ciò richiede al sistema operativo sottostante di massimizzare JFrame.

 setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH); 

Un altro approccio sarebbe quello di massimizzare manualmente lo schermo per te requisito.

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

Ma questo ha delle insidie ​​nel sistema operativo Ubuntu. Il lavoro che ho trovato è stato questo.

  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(); lx -= px; ly -= py; setLocation(p); } }); } Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); setBounds(100, 100, (int) dim.getWidth(), (int) dim.getHeight()); setLocationRelativeTo(null); 

In Fedora il problema di cui sopra non è presente. Ma ci sono delle complicazioni legate a Gnome o KDE . Quindi meglio stare attento. Spero che questo ti aiuti.

Basta usare questo codice:

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

Spero che aiuti.

Correzione più semplice di sempre:

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

ti aiuterà a usare il tuo object istantaneo del fotogramma

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

Prima di tutto, questa è la risoluzione che vorresti usare, 1650,1080 .

Adesso aggiungi:

 frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

Se hai problemi con i componenti su JFrame, dopo aver aggiunto tutti i componenti usando il frame.add(component) , aggiungi la seguente dichiarazione.

 frame.pack(); 

I valori evidenziati che intendo:

! JFrame – Proprietà

Imposta 2 proprietà di seguito:

  1. extendedState = 6
  2. resizeable = true

Per me funziona.