Java 如何使JFrame真正全屏化?
在我的Java应用程序中,我尝试使用以下代码使JFrame真正全屏:Java 如何使JFrame真正全屏化?,java,swing,jframe,fullscreen,Java,Swing,Jframe,Fullscreen,在我的Java应用程序中,我尝试使用以下代码使JFrame真正全屏: public class MainFrame extends JFrame { private static final long serialVersionUID = 1L; public MainFrame() { super(); this.setTitle(); this.setUndecorated(true); this.setE
public class MainFrame extends JFrame {
private static final long serialVersionUID = 1L;
public MainFrame() {
super();
this.setTitle();
this.setUndecorated(true);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setVisible(true);
//this.pack();
}
}
但在我的Mac上,我仍然可以看到OSX的Dock和顶部工具栏。那么,我如何才能创建一个真正占用整个屏幕的JFrame呢
编辑
我必须补充一点,我想从eclipse插件调用这个JFrame。我还没有尝试过,但Java有全屏API,应该可以满足您的需要:
我知道答案。首先,我必须承认,如果你正在制作视频或电影播放器或动画播放器,下面的技巧是行不通的。好的,这是我在多次尝试后发现的: 假设您想在按下按钮(称为fullscreenButton)时使JFrame(称为frame)全屏显示。然后执行以下操作:
import java.awt.*;
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) {
// TODO Auto-generated method stub
if(Am_I_In_FullScreen == false){
PrevX = getX();
PrevY = getY();
PrevWidth = getWidth();
PrevHeight = getHeight();
dispose(); //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
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;
}
}
}
}
我希望你喜欢它举个例子:
import java.awt.FlowLayout;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class FullScreenJFrame extends JFrame{
private GraphicsDevice vc;
public FullScreenJFrame(){
super();
GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
vc= e.getDefaultScreenDevice();
JButton b = new JButton("exit");
b.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
dispose();
System.exit(0);
}
}
);
this.setLayout(new FlowLayout());
this.add(b);
setFullScreen(this);
}
public void setFullScreen(JFrame f){
f.setUndecorated(true);
f.setResizable(false);
vc.setFullScreenWindow(f);
}
public static void main(String[] args){
new FullScreenJFrame();
}
}
注意:使用swidth,sheight vars让您可以自由进一步调整。最好的方法是使用
int
vars代替-40
,例如sheight/swidth-margin
等这里的余量应该来自参数表。完全控制局势。
也可以直接使用:
setBounds(0,0,screenSize.width,screenSize.height)代码>使用com.apple.eawt.FullScreenUtilities。并确保测试系统是否运行Mac OS
public void enableFullscreen(Window window, boolean bool) {
if (System.getProperty("os.name").startsWith("Mac OS")) {
com.apple.eawt.FullScreenUtilities.setWindowCanFullScreen(window, bool);
}
}
看看这个:可能重复感谢,但是如果它是一个Eclipse插件,那么这里的例子就不起作用了。setExtendedState(JFrame.MAXIMIZED_两者都有);谢谢,但是当我从eclipse插件创建JFrame时,这似乎不起作用。对于另一个问题,给出了使这种方法起作用所需的一些示例代码。幻数-10、-100、30和110来自哪里(setBounds的数量与声称的屏幕大小相抵消)?这是具有相同值的便携设备吗?窗口的一部分会离开屏幕吗?@g.rocket你说得对,这些数字正好适合我的应用程序。参数化的数字是setBounds(0,0,getToolkit().getScreenSize().width,getToolkit().getScreenSize().height);未设置边界(-10,-100,getToolkit().getScreenSize().width+30,getToolkit().getScreenSize().height+110);我会编辑它的thx
public void enableFullscreen(Window window, boolean bool) {
if (System.getProperty("os.name").startsWith("Mac OS")) {
com.apple.eawt.FullScreenUtilities.setWindowCanFullScreen(window, bool);
}
}