Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Java Fullscreen Application

Posted on 2004-03-21
4
Medium Priority
?
2,921 Views
Last Modified: 2012-06-27
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.
0
Comment
Question by:Ulfsark
  • 3
4 Comments
 

Author Comment

by:Ulfsark
ID: 10643346
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
 
LVL 30

Expert Comment

by:GrandSchtroumpf
ID: 10643440
you can use something like this:
          conpane.remove(pan1);
          conpane.add(pan2, BorderLayout.CENTER);
0
 
LVL 30

Accepted Solution

by:
GrandSchtroumpf earned 500 total points
ID: 10643622
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
 
LVL 30

Expert Comment

by:GrandSchtroumpf
ID: 10645153
:°)
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
In this post we will learn how to make Android Gesture Tutorial and give different functionality whenever a user Touch or Scroll android screen.
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…
Suggested Courses

876 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question