如何正确输出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);
问题
在那里搜索“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的答案,最佳方式