全屏Java中的JFrame

Posted

技术标签:

【中文标题】全屏Java中的JFrame【英文标题】:JFrame in full screen Java 【发布时间】:2012-07-19 04:47:03 【问题描述】:

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

它将在窗口中绘制一些图形。如果我使用 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?

【问题讨论】:

【参考方案1】:

使用setExtendedState(int state),其中状态为JFrame.MAXIMIZED_BOTH

【讨论】:

【参考方案2】:

添加:

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

【讨论】:

完成,***.com/questions/46804305/… 见:***.com/questions/62286865/…【参考方案3】:

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

How can I do full screen in Java on OSX Java setFullScreenWindow() keep on top

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


【讨论】:

【参考方案4】:

一种方法是使用扩展状态。这要求底层操作系统最大化 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 中不存在上述问题。但是Gnome 或KDE 会带来一些麻烦。所以最好小心点。希望这会有所帮助。

【讨论】:

【参考方案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;
            
        
    

我希望这会有所帮助。

【讨论】:

【参考方案6】:

在下面设置 2 个属性:

    扩展状态 = 6 可调整大小 = true

它对我有用。

【讨论】:

【参考方案7】:

我的意思是突出显示的值:

【讨论】:

【参考方案8】:

有史以来最简单的修复:

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

【讨论】:

【参考方案9】:

它将帮助您使用框架中的对象瞬间

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

【讨论】:

【参考方案10】:

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

现在添加:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

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

frame.pack();

【讨论】:

【参考方案11】:

你只需要这个:

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

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

有人建议使用这个:

frame.setUndecorated(true);

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

【讨论】:

【参考方案12】:
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));

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

【讨论】:

【参考方案13】:

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

extendedState 6
resizeable    true

【讨论】:

【参考方案14】:

你可以这样做 -

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

【讨论】:

以上是关于全屏Java中的JFrame的主要内容,如果未能解决你的问题,请参考以下文章

JAVA--JFrame

Java贪吃蛇小游戏

在全屏模式下运行应用程序时,Java Swing 无法找出 JPanel 的问题

Java:Linux 中的图形

Java Swing界面编程(31)---菜单条:JMenu

需要帮助访问内部类中的变量for循环