Java Fullscreen Application

Ok, I'm building a Java App in fullscreen mode. I've got the fullscreen mode working on a JFrame object with a JPanel added to it for content. What I need to know is how to swap the JPanel for a different one without dropping out of fullscreen mode. I suspect this has something to do with the BufferStrategy class, but I can't get it to work.

Here's what I've got so far, with a MyPanel jsut being a simple JPanel with an image and a settable background color. It should show the red one, wait around for a sec, then show the blue one. Currently it jsut shows the red one then a blank screen.

public static void main(String args[]) {
      try {
                GraphicsDevice screen = screenSetup();
            DisplayMode dmode = new DisplayMode(800, 600, 32, DisplayMode.REFRESH_RATE_UNKNOWN);
            JFrame frame = makeFrame();

            MyPanel pan1 = testPanel(Color.RED);
            MyPanel pan2 = testPanel(Color.BLUE);

              Container conpane = frame.getContentPane();
            conpane.add(pan1, BorderLayout.CENTER);

            screen.setFullScreenWindow(frame);
            screen.setDisplayMode(dmode);

            frame.createBufferStrategy(2);
            BufferStrategy bufstrat = frame.getBufferStrategy();
            Graphics g = bufstrat.getDrawGraphics();

            Thread.sleep(6000);
            Rectangle bounds = frame.getBounds();
            javax.swing.SwingUtilities.paintComponent(g, pan2, conpane, bounds);
            bufstrat.show();

      } catch (Exception ex) {
            ex.printStackTrace();
      }
}

Thanx.
UlfsarkAsked:
Who is Participating?
 
GrandSchtroumpfConnect With a Mentor Commented:
here is a class that demonstrates how to switch between 2 panels in full screen.
clicking the button switches the panels.

in the main method, you can use the showFrame() method instead of the fullScreen() to show your frame in normal mode (normal = not-full-screen).

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.BufferStrategy;

class PanelTest implements ActionListener {

  JFrame frame = new JFrame();
  JPanel pan1 = new JPanel();
  JPanel pan2 = new JPanel();
  JButton button1 = new JButton("Button One");
  JButton button2 = new JButton("Button Two");
  boolean containsPan1 = false;
 
  public void showFrame() {
    frame.pack();
    frame.setVisible(true);
  }

  public PanelTest() {
    pan1.setBackground(Color.RED);
    pan2.setBackground(Color.BLUE);
    pan1.add(button1);
    pan2.add(button2);
    button1.addActionListener(this);
    button2.addActionListener(this);
    switchPanel();
  }

  public void switchPanel() {
    frame.getContentPane().removeAll();
    JPanel toadd = (containsPan1)? pan1 : pan2;
    containsPan1 = !containsPan1;
    frame.getContentPane().add(toadd, BorderLayout.CENTER);
    frame.validate();
    toadd.repaint();
  }

  public void actionPerformed(ActionEvent e) {
    switchPanel();
  }

  public void fullScreen() {
    frame.setUndecorated(true);
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] gs = ge.getScreenDevices();
    GraphicsDevice gdev = gs[0];
    gdev.setFullScreenWindow(frame);
  }

  public static void main(String args[]) {
    PanelTest test = new PanelTest();
    test.fullScreen();
    //test.showFrame();
  }

}
0
 
UlfsarkAuthor Commented:
Oh, sorry, here's the rest of the methods if they help.

      private static GraphicsDevice screenSetup() {
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            GraphicsDevice[] gs = ge.getScreenDevices();
            GraphicsDevice gdev = gs[0];
            return gdev;
      }

/*****************************************************************************/

      public static JFrame makeFrame() {
            JFrame frame = new JFrame();
            frame.setUndecorated(true);
            return frame;
      }

/*****************************************************************************/

      public static MyPanel testPanel(Color c) {
            MyPanel panel = new MyPanel();
            panel.setBackground(c);
            JLabel lab = new JLabel(new ImageIcon("images/loading-screen.gif"));
            panel.add(lab, BorderLayout.CENTER);
            return panel;
      }
0
 
GrandSchtroumpfCommented:
you can use something like this:
          conpane.remove(pan1);
          conpane.add(pan2, BorderLayout.CENTER);
0
 
GrandSchtroumpfCommented:
:°)
0
All Courses

From novice to tech pro — start learning today.