Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确输出java全屏_Java_Swing_User Interface_Awt_Fullscreen - Fatal编程技术网

如何正确输出java全屏

如何正确输出java全屏,java,swing,user-interface,awt,fullscreen,Java,Swing,User Interface,Awt,Fullscreen,现在,我在我的程序中所做的是,我使用setundecorated=true和MAXIMIZED_两者,因此它可以全屏显示,显示看起来非常漂亮,但问题是屏幕的左右两侧都有图像(边框),还有蓝色背景。发生的情况是,在更改屏幕和分辨率时,这些图像会受到干扰,无法正确显示。那些灰色的斑点又出现了 历史: 我有一个java程序,我想总是全屏打开;我找不到合适的方法,所以我将最小尺寸调整为(1370727)和最大尺寸。因此,它开始在我的笔记本电脑上正常打开,但当我将笔记本电脑的显示器更改为LCD时,它开始

现在,我在我的程序中所做的是,我使用
setundecorated=true
MAXIMIZED_两者
,因此它可以全屏显示,显示看起来非常漂亮,但问题是屏幕的左右两侧都有图像(边框),还有蓝色背景。发生的情况是,在更改屏幕和分辨率时,这些图像会受到干扰,无法正确显示。那些灰色的斑点又出现了

历史: 我有一个java程序,我想总是全屏打开;我找不到合适的方法,所以我将最小尺寸调整为(1370727)和最大尺寸。因此,它开始在我的笔记本电脑上正常打开,但当我将笔记本电脑的显示器更改为LCD时,它开始出现问题:

它将在较小的窗口中打开:

如果我单击最大化按钮,则在侧面和底部会出现一个灰色区域(我希望屏幕上的项目拉伸或居中):

举个例子,底部有一个灰色的补丁。相反,我希望背景覆盖整个屏幕。

更新1 如果我改为可拉伸gridbaglayout,这就是我使用的代码以及发生的情况:

Menu.setExtendedState(MAXIMIZED_BOTH);
GridBagLayout gbl = new GridBagLayout();
Menu.setLayout(gbl);
JButton component = new JButton("1");
gbl.layoutContainer(Menu);
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.NONE;
gbl.setConstraints(component, gbc);
Menu.add(component);
Menu.pack();
Menu.setVisible(true);

问题

  • 我如何将“this”框架设置为setExtendedState(MAXIMIZED_BOTH),就像我对其他框架所做的那样?(如果我在main函数中这样做,我会得到一个错误;即使我为此创建了一个函数并在main中调用它,我也会得到一个错误)

  • 我如何根据额外的灰色空间让所有东西伸展/重新排列

  • 更新2 我在此项目中的文件:

    更新3 这是我正在处理的当前文件
    在那里搜索“MAXIMIZED_two”,你会找到我想你会想要检查的代码。

    试试这个,希望它也对你有用

    MyFrame mFrame= new MyFrame();
    mFrame.setVisible(true);
    mFrame.setExtendedState(mFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
    

    我的申请也有类似的问题。最近的一个方法是将位于顶部的所有组件设置为component.setOpaque(false)或component.setBackground(新颜色(255255,0))。您还可以为未使用的面板尝试panel.setVisible(false)。 很难在没有整个程序的情况下提供代码,但请尝试一下:

    Menu.setBackground(new Color(255,255,255,0);
    

    我知道这是一个糟糕的答案,因为我没有时间写任何代码。您是否尝试过创建一个侦听器,以便在实际创建窗口后获得适当的最大大小,然后相应地设置GridBagConstraints weightx和weighty属性?

    您尝试过这段代码吗

    JFrame frame = new JFrame();
    frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
    frame.setVisible(true);
    
    您可以通过java中的“Toolkit.getDefaultToolkit().getScreenSize()”获取任何设备的全屏大小。上面的代码我将帧大小设置为全屏

    int height = Toolkit.getDefaultToolkit().getScreenSize().height;
    int width = Toolkit.getDefaultToolkit().getScreenSize().width;
    
    通过使用上述代码,您可以获得代码的屏幕高度和宽度。我想这会有帮助。

    你可以很容易地打电话给我

    setExtendedState(最大化)在jframe或

    使用下面的代码设置任何电脑的屏幕大小

    //屏幕大小

     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    
    //任务栏的高度

    Insets scnMax = Toolkit.getDefaultToolkit().getScreenInsets(getGraphicsConfiguration());
        int taskBarSize = scnMax.bottom;
    
    //屏幕的可用大小

     setSize(screenSize.width, screenSize.height - taskBarSize);
        setLocation(screenSize.width - getWidth(), screenSize.height - taskBarSize - getHeight());
    

    如果你想删除任务栏大小以获得全屏效果,这就是代码,这将对你有所帮助。

    通常,对于游戏而言,最好使用全屏模式,而不是使用最大化窗口。您可以在Java中使用以下命令来完成此操作:

    GraphicsEnvironment gfxEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice gfxDev = gfxEnv.getDefaultScreenDevice();
    
    Window window = new GameWindow();
    gfxDev.setFullScreenWindow(window);
    
    如果仍要使用常规框架并使内容面板居中,则需要定义一些GridBagLayout约束。不可能在屏幕上看到其余组件的代码,但请考虑以下内容:

  • gridbag.fill
  • gridbag.anchor
  • GridBagConstraints.weightx
  • 有分量的
  • 最后,关于将屏幕设置为最大尺寸,这里已经提到:

    我也有与您相同的要求,下面的代码适合我

    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    setBounds(0,0,d.width,d.height); // i assume you have extended JFrame
    

    尝试将图像设置为您的JFrame背景。因此,它将随帧大小进行调整


    所以,即使在全屏显示时,它也会进行调整。

    如果您使用面板,则可以根据面板大小调整大小,它以全屏显示

    yourinternalframe.setSize(mainPanel.getSize());
    yourinternalframe.show();
    

    这似乎不是您真正的需要,您可以根据这一点做一些事情。我查看了您为FormTTS.java附加的代码,我发现您的屏幕设置为使用硬编码到某些像素数的绝对布局。 请看以下代码:

    Menu.getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout())

    Menu.getContentPane().add(jPanel3,new org.netbeans.lib.awtextra.AbsoluteConstraints(420、230、530、320))

    JFrame没有使用GridBagLayout,而是使用Netbeans库中的AbsoluteLayout。所以我猜您是使用Netbeans中的工具生成这些UI代码的

    然后,对于最大化时不会填满所有屏幕的图片:
    jLabel9.setIcon(新的javax.swing.ImageIcon(getClass().getResource(“/freetts/equations.png”))

    Menu.getContentPane().add(jLabel9,new org.netbeans.lib.awtextra.AbsoluteConstraints(0,01530990))

    这里也有同样的问题,它被硬编码为一些像素数

    如果您希望在最大化屏幕时将所有内容居中,我认为唯一的方法是为JFrame使用gridbag布局,这要求您更新代码中的几乎所有内容。您需要完全了解GridBagLayout是如何工作的

    但是,如果您只希望背景图像填充屏幕,可以按照此处的步骤缩放图片以填充JLabel的大小:


    如果仍然不起作用,您还应该获得屏幕的大小(从这里的一个答案),然后使用这些值设置
    JLabel
    preferedSize
    ,以及缩放图像

    再加上@eitanfar的答案,最佳方式