web-dev-qa-db-ja.com

JFrameを実際にフルスクリーンにする方法は?

私のJavaアプリケーションでは、このコードを使用してJFrameを実際にフルスクリーンにしようとしています:

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では、DockとOSXの上部のツールバーをまだ見ることができます。では、画面全体を実際に消費するJFrameを作成するにはどうすればよいですか?

[〜#〜] edit [〜#〜] EclipseプラグインからそのJFrameを呼び出したいことを追加する必要があります。

20

まだ試していませんが、JavaにはフルスクリーンAPIがあります。

http://docs.Oracle.com/javase/tutorial/extra/fullscreen/index.html

12
iirekm

答えを知っている。まず、ビデオまたはムービープレーヤーまたはアニメーションプレーヤーを作成している場合、次のトリックが機能しないことを認めなければなりません。ここで[OK]を何度も試してみました:

ボタン(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;
               }
    }
    }
}

楽しんでいただけたでしょうか

5
PeGiannOS

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

    }

}
0
Hunter Munts

例:

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

}
0
Oscar Belletti
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:swidthを使用して、sheight varsはさらに調整する自由を与えます。
最善の方法は、- 40の代わりにint varsを使用することです(例:sheight/swidth - marginなど)。
ここで、マージンはパラメータテーブルから取得する必要があります。状況を完全に制御する。
直接使用も可能です:setBounds(0,0,screenSize.width, screenSize.height);

0
nukhan