JFrame em canvas cheia Java

Eu estarei fazendo um projeto em breve e terei que usar o modo de canvas cheia nele.

Ele irá desenhar alguns charts na janela. Seria conveniente se eu usasse o JFrame ou algo similar.

Eu não sei qual será a resolução final da canvas. Por favor, diga-me se os charts serão redimensionados automaticamente?

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? 

Adicionar:

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

Se você quiser colocar o quadro no modo de canvas inteira (como um filme em canvas cheia), verifique essas respostas.

  • Como posso fazer canvas cheia em Java no OSX
  • Java setFullScreenWindow () manter no topo

As classs java.awt.GraphicsEnvironment e java.awt.GraphicsDevice são usadas para colocar um aplicativo no modo de canvas cheia na única canvas (o dispositivo).

por exemplo:

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

Use setExtendedState(int state) , onde state seria JFrame.MAXIMIZED_BOTH .

Uma maneira é usar o estado estendido. Isso pede ao sistema operacional subjacente para maximizar o JFrame.

 setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH); 

Outra abordagem seria maximizar manualmente a canvas para sua necessidade.

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

Mas isso tem armadilhas no sistema operacional Ubuntu. O trabalho em volta que encontrei foi isso.

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

No Fedora, o problema acima não está presente. Mas há complicações envolvidas no Gnome ou no KDE . Então é melhor ter cuidado. Espero que isto ajude.

Apenas use este código:

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

Eu espero que isso ajude.

Correção mais fácil de sempre:

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

ajudará você a usar seu object instantâneo do quadro

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

Primeiro de tudo, essa é a resolução que você gostaria de usar, 1650,1080 .

Agora adicione:

 frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

Se você tiver problemas com os componentes no JFrame, depois de adicionar todos os componentes usando o método frame.add(component) , adicione a seguinte instrução.

 frame.pack(); 

Valores destacados que quero dizer:

! JFrame – Propriedades

Defina 2 propriedades abaixo:

  1. extendedState = 6
  2. resizeable = true

Funciona para mim.