全屏Java中的JFrame

我将很快做一个项目,我将不得不使用全屏模式。

它会在窗口中绘制一些graphics。 如果我使用JFrame或类似的东西,会很方便。

我不知道屏幕的最终分辨率是什么。 请告诉我,如果graphics将被自动重新调整?

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? 

加:

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

如果你想把你的画面放在全屏幕模式(比如全屏幕的电影),请检查这些答案。

  • 我怎样才能在OSX上的Java全屏幕
  • Java setFullScreenWindow()保持在最前面

java.awt.GraphicsEnvironmentjava.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操作系统中有缺陷。 我发现的工作是这样的。

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

在Fedora中,上述问题不存在。 但是Gnome或者KDE有一些复杂的问题。 所以最好小心点。 希望这可以帮助。

只要使用这个代码:

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

我希望这有帮助。

最简单的修复:

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

值得强调的是我的意思是:

! JFrame – 属性

它会帮助你在框架的瞬间使用你的对象

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

在下面设置2个属性:

  1. extendedState = 6
  2. resizeable = true

这个对我有用。