2012-04-07 13 views
20

En mi aplicación Java que tratan de hacer realidad un JFrame pantalla completa utilizando este código:¿Cómo hacer un JFrame realmente a pantalla completa?

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

Pero en mi Mac que todavía se puede ver el Dock y la barra de herramientas superior de la OSX. Entonces, ¿cómo puedo crear un JFrame que realmente consuma toda mi pantalla?

EDIT Tengo que agregar que quiero llamar a ese JFrame desde un plugin de eclipse.

+0

Tome un vistazo a esto: http://docs.oracle.com/javase/tutorial/extra/fullscreen/index.html – dexametason

+2

posible duplicado de [¿Cómo puedo hacer de pantalla completa en Java en OSX] (http://stackoverflow.com/questions/1155838/how-can-i-do-full-screen-in-java-on-osx) – krock

+0

Gracias pero los ejemplos allí no funcionan si se trata de un plugin de Eclipse. – RoflcoptrException

Respuesta

12

no he probado todavía, pero tiene Java API en pantalla completa, que debe satisfacer sus necesidades:

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

+2

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

+1

Gracias, pero parece que esto no funciona cuando creo el JFrame a partir de un complemento de eclipse. – RoflcoptrException

+0

[Esta respuesta] (http://stackoverflow.com/a/11499100/1048186) a otra pregunta proporciona algún código de ejemplo necesario para que este enfoque funcione. –

5

sé la respuesta. En primer lugar, tengo que admitir que el siguiente truco no funcionará si está haciendo un reproductor de video o película o un reproductor de animación. Aceptar esto es lo que he encontrado después de muchos intentos:

Digamos que usted quiere hacer una pantalla completa JFrame (llamado marco) cuando se pulsa un botón (llamado FullScreenButton) .A continuación, haga lo siguiente:

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

Espero que lo hayan disfrutado

+1

¿de dónde vienen los números mágicos -10, -100, 30 y 110 (las cantidades que setBounds está desviada del tamaño de pantalla reclamado)? ¿Es portátil con esos mismos valores? ¿Parte de la ventana estará fuera de la pantalla? –

+0

@ g.rocket tiene razón esos números que se ajustan a mi aplicación. Un paramétrico es setBounds (0,0, getToolkit(). GetScreenSize(). Width, getToolkit(). GetScreenSize(). Height); no setBounds (-10, -100, getToolkit(). getScreenSize(). width + 30, getToolkit(). getScreenSize(). height + 110); lo editaré thx – PeGiannOS

0

Un ejemplo:

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

Nota: el uso de swidth, shei ght vars le da la libertad de ajustarse aún más.
La mejor manera es usar int vars en lugar de - 40 por ejemplo sheight/swidth - margin etc.
Aquí el margen debe provenir de la tabla de parámetros. Obtener el control total de la situación.
El uso directo también es posible como: setBounds(0,0,screenSize.width, screenSize.height);

0

Utilice com.apple.eawt.FullScreenUtilities. Y asegúrese de probar que el sistema ejecuta Mac OS.

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

    } 

} 
Cuestiones relacionadas