121

我很快就会做一个项目,我将不得不在其中使用全屏模式。

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

我不知道屏幕的最终分辨率是多少。请告诉我图形是否会自动重新缩放?

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?
4

14 回答 14

233

添加:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
frame.setUndecorated(true);
frame.setVisible(true);
于 2012-07-19T22:45:32.647 回答
41

如果您想将您的框架置于全屏模式(如全屏电影),请检查这些答案。

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

}
于 2012-07-19T23:06:30.170 回答
12

使用setExtendedState(int state), 状态将在哪里JFrame.MAXIMIZED_BOTH

于 2012-07-19T22:40:52.000 回答
7

一种方法是使用扩展状态。这要求底层操作系统最大化 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();
            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);

在 Fedora 中不存在上述问题。但是GnomeKDE存在一些并发症。所以最好小心点。希望这可以帮助。

于 2012-07-20T02:32:53.380 回答
6

有史以来最简单的修复:

for ( Window w : Window.getWindows() ) {
    GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow( w );
}
于 2016-01-30T23:40:13.867 回答
5

只需使用此代码:

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

我希望这有帮助。

于 2012-11-07T22:59:34.960 回答
2

它将帮助您使用框架的即时对象

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

于 2016-09-17T15:54:42.547 回答
2

首先,这是您要使用的分辨率,1650,1080.

现在添加:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

如果您对 JFrame 上的组件有疑问,则在使用该frame.add(component)方法添加所有组件后,添加以下语句。

frame.pack();
于 2018-02-10T00:29:05.740 回答
2

你只需要这个:

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

当您使用 MAXIMIZED_BOTH 修饰符时,它将在整个窗口(高度和宽度)中一直保持最大值。

有一些建议使用这个:

frame.setUndecorated(true);

我不会推荐它,因为您的窗口没有标题,因此没有关闭/恢复/最小化按钮。

于 2019-04-30T15:18:16.340 回答
2
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));

这只是使框架成为屏幕的大小

于 2019-05-09T08:35:27.980 回答
1

您可以使用属性工具。为您的JFrame
设置 2 个属性:

extendedState 6
resizeable    true
于 2019-12-26T17:00:04.567 回答
0

我的意思是强调的价值观:

JFrame - 属性

于 2014-11-18T03:53:21.313 回答
0

你可以简单地这样做 -

public void FullScreen() {
        if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
            final View v = this.activity.getWindow().getDecorView();
            v.setSystemUiVisibility(8);
        }
        else if (Build.VERSION.SDK_INT >= 19) {
            final View decorView = this.activity.getWindow().getDecorView();
            final int uiOptions = 4102;
            decorView.setSystemUiVisibility(uiOptions);
        }
    }
于 2021-02-10T07:01:58.773 回答
-1

在下面设置 2 个属性:

  1. 扩展状态 = 6
  2. 可调整大小 = 真

这个对我有用。

于 2014-11-14T08:35:43.007 回答