In meiner Java-Anwendung versuche ich, einen JFrame mit diesem Code wirklich als Vollbild darzustellen:
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();
}
}
Auf meinem Mac kann ich jedoch immer noch das Dock und die obere Symbolleiste des OSX sehen. Wie kann ich also einen JFrame erstellen, der meinen gesamten Bildschirm wirklich verbraucht?
EDIT Ich muss hinzufügen, dass ich diesen JFrame von einem Eclipse-Plugin aus aufrufen möchte.
Ich habe es noch nicht ausprobiert, aber Java verfügt über eine Vollbild-API, die Ihren Anforderungen entsprechen sollte:
http://docs.Oracle.com/javase/tutorial/extra/fullscreen/index.html
Ich weiß die Antwort. Erstens muss ich zugeben, dass der folgende Trick nicht funktioniert, wenn Sie einen Video- oder Movie-Player oder einen Animationsplayer erstellen. OK, das habe ich nach vielen Versuchen gefunden:
Angenommen, Sie möchten einen JFrame-Frame (genannt Frame) erstellen, wenn Sie eine Schaltfläche (FullscreenButton) drücken. Führen Sie dann die folgenden Schritte aus:
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;
}
}
}
}
Ich hoffe, dass es Ihnen gefallen hat
Verwenden Sie com.Apple.eawt.FullScreenUtilities. Stellen Sie sicher, dass auf dem System Mac OS ausgeführt wird.
public void enableFullscreen(Window window, boolean bool) {
if (System.getProperty("os.name").startsWith("Mac OS")) {
com.Apple.eawt.FullScreenUtilities.setWindowCanFullScreen(window, bool);
}
}
Ein Beispiel:
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();
}
}
private Dimension screenSize; /* class level vars */
private swidth , sheight;
/*In GUI creating method:put this code: */
screenSize = Toolkit.getDefaultToolkit().getScreenSize();
sheight = screenSize.height;
swidth = screenSize.width;
setBounds(0, 0, swidth, sheight-40);
NB: Mit swidth geben Ihnen Sheight Vars die Freiheit, sich weiter anzupassen.
Am besten verwenden Sie int
vars anstelle von - 40
, z. B. sheight/swidth - margin
usw.
Hier sollte der Rand aus der Parametertabelle stammen. Vollständige Kontrolle über die Situation.
Direkte Verwendung auch möglich als: setBounds(0,0,screenSize.width, screenSize.height);