2012-04-07 13 views
20

Nella mia applicazione Java cerco di fare un JFrame davvero fullscreen utilizzando questo codice:Come rendere un JFrame davvero a schermo intero?

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

Ma sul mio Mac posso ancora vedere il Dock e la barra degli strumenti superiore della OSX. Quindi, come posso creare un JFrame che consuma davvero tutto il mio schermo?

EDIT Devo aggiungere che voglio chiamare quel JFrame da un plugin di eclissi.

+0

Date un'occhiata a questo: http://docs.oracle.com/javase/tutorial/extra/fullscreen/index.html – dexametason

+2

possibile duplicato di [Come posso fare schermo intero in Java su OSX] (http://stackoverflow.com/questions/1155838/how-can-i-do-full-screen-in-java-on-osx) – krock

+0

Grazie, ma gli esempi non funzionano se si tratta di un plug-in Eclipse. – RoflcoptrException

risposta

12

non l'ho ancora provato, ma Java ha API a schermo intero, che dovrebbe soddisfare le vostre esigenze:

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

+2

+1 ['FullScreenTest'] (http://stackoverflow.com/a/7457102/230513) è un esempio. – trashgod

+1

Grazie, ma questo non sembra funzionare quando creo JFrame da un plug-in di eclissi. – RoflcoptrException

+0

[Questa risposta] (http://stackoverflow.com/a/11499100/1048186) a un'altra domanda fornisce alcuni esempi di codice necessari per far funzionare questo approccio. –

5

conosco la risposta. In primo luogo, devo ammettere che il seguente trucco non funzionerà se stai realizzando video o riproduttori di film o di animazione. OK ecco cosa ho trovato dopo molti tentativi:

Diciamo che si vuole fare un fullscreen JFrame (chiamato frame) quando si preme un pulsante (chiamato FullScreenButton) .Poi procedere come segue:

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

Spero che ti sia piaciuto

+1

da dove provengono i numeri magici -10, -100, 30 e 110 (le quantità che setBounds è compensata dalla dimensione dello schermo richiesta)? È portatile con quegli stessi valori? Parte della finestra sarà fuori dallo schermo? –

+0

@ g.rocket hai ragione quei numeri sono adatti per la mia app. Uno parametrico è setBounds (0,0, getToolkit(). GetScreenSize(). Width, getToolkit(). GetScreenSize(). Height); non setBounds (-10, -100, getToolkit(). getScreenSize(). width + 30, getToolkit(). getScreenSize(). height + 110); lo modificherò grazie – PeGiannOS

0

Un esempio:

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
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: utilizzando swidth, shei ght vars ti danno la libertà di adattarti ulteriormente.
Il modo migliore è utilizzare int vars al posto di - 40 ad esempio sheight/swidth - margin ecc.
Qui il margine dovrebbe provenire dalla tabella dei parametri. Ottenere il pieno controllo della situazione.
Utilizzo diretto possibile anche come: setBounds(0,0,screenSize.width, screenSize.height);

0

Utilizzare com.apple.eawt.FullScreenUtilities. E assicurati di verificare che il sistema esegua Mac OS.

public void enableFullscreen(Window window, boolean bool) { 
    if (System.getProperty("os.name").startsWith("Mac OS")) { 
     com.apple.eawt.FullScreenUtilities.setWindowCanFullScreen(window, bool); 

    } 

}