<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2F2D_Graphics_GUI%2FFull_Screen</id>
		<title>Java/2D Graphics GUI/Full Screen - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2F2D_Graphics_GUI%2FFull_Screen"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/2D_Graphics_GUI/Full_Screen&amp;action=history"/>
		<updated>2026-04-21T12:52:09Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/2D_Graphics_GUI/Full_Screen&amp;diff=8147&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/2D_Graphics_GUI/Full_Screen&amp;diff=8147&amp;oldid=prev"/>
				<updated>2010-06-01T06:55:12Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:55, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/2D_Graphics_GUI/Full_Screen&amp;diff=8146&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/2D_Graphics_GUI/Full_Screen&amp;diff=8146&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Full screen: Capabilities Test ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions are met:&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution of source code must retain the above copyright notice, this&lt;br /&gt;
 *  list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution in binary form must reproduce the above copyright notice,&lt;br /&gt;
 *  this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
 *  and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may&lt;br /&gt;
 * be used to endorse or promote products derived from this software without&lt;br /&gt;
 * specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST&lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,&lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY&lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
/**&lt;br /&gt;
 * This test shows the different buffer capabilities for each&lt;br /&gt;
 * GraphicsConfiguration on each GraphicsDevice.&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.BufferCapabilities;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.FlowLayout;&lt;br /&gt;
import java.awt.GraphicsConfiguration;&lt;br /&gt;
import java.awt.GraphicsDevice;&lt;br /&gt;
import java.awt.GraphicsEnvironment;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import java.awt.ImageCapabilities;&lt;br /&gt;
import java.awt.event.ItemEvent;&lt;br /&gt;
import java.awt.event.ItemListener;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import javax.swing.BorderFactory;&lt;br /&gt;
import javax.swing.JCheckBox;&lt;br /&gt;
import javax.swing.JComboBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
/**&lt;br /&gt;
 * This class wraps a graphics configuration so that it can be displayed nicely&lt;br /&gt;
 * in components.&lt;br /&gt;
 */&lt;br /&gt;
class GCWrapper {&lt;br /&gt;
  private GraphicsConfiguration gc;&lt;br /&gt;
  private int index;&lt;br /&gt;
  public GCWrapper(GraphicsConfiguration gc, int index) {&lt;br /&gt;
    this.gc = gc;&lt;br /&gt;
    this.index = index;&lt;br /&gt;
  }&lt;br /&gt;
  public GraphicsConfiguration getGC() {&lt;br /&gt;
    return gc;&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return gc.toString();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * Main frame class.&lt;br /&gt;
 */&lt;br /&gt;
public class CapabilitiesTest extends JFrame implements ItemListener {&lt;br /&gt;
  private JComboBox gcSelection = new JComboBox();&lt;br /&gt;
  private JCheckBox imageAccelerated = new JCheckBox(&amp;quot;Accelerated&amp;quot;, false);&lt;br /&gt;
  private JCheckBox imageTrueVolatile = new JCheckBox(&amp;quot;Volatile&amp;quot;, false);&lt;br /&gt;
  private JCheckBox flipping = new JCheckBox(&amp;quot;Flipping&amp;quot;, false);&lt;br /&gt;
  private JLabel flippingMethod = new JLabel(&amp;quot;&amp;quot;);&lt;br /&gt;
  private JCheckBox fullScreen = new JCheckBox(&amp;quot;Full Screen Only&amp;quot;, false);&lt;br /&gt;
  private JCheckBox multiBuffer = new JCheckBox(&amp;quot;Multi-Buffering&amp;quot;, false);&lt;br /&gt;
  private JCheckBox fbAccelerated = new JCheckBox(&amp;quot;Accelerated&amp;quot;, false);&lt;br /&gt;
  private JCheckBox fbTrueVolatile = new JCheckBox(&amp;quot;Volatile&amp;quot;, false);&lt;br /&gt;
  private JCheckBox bbAccelerated = new JCheckBox(&amp;quot;Accelerated&amp;quot;, false);&lt;br /&gt;
  private JCheckBox bbTrueVolatile = new JCheckBox(&amp;quot;Volatile&amp;quot;, false);&lt;br /&gt;
  public CapabilitiesTest(GraphicsDevice dev) {&lt;br /&gt;
    super(dev.getDefaultConfiguration());&lt;br /&gt;
    addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent ev) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    initComponents(getContentPane());&lt;br /&gt;
    GraphicsConfiguration[] gcs = dev.getConfigurations();&lt;br /&gt;
    for (int i = 0; i &amp;lt; gcs.length; i++) {&lt;br /&gt;
      gcSelection.addItem(new GCWrapper(gcs[i], i));&lt;br /&gt;
    }&lt;br /&gt;
    gcSelection.addItemListener(this);&lt;br /&gt;
    gcChanged();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates and lays out components in the container. See the comments below&lt;br /&gt;
   * for an organizational overview by panel.&lt;br /&gt;
   */&lt;br /&gt;
  private void initComponents(Container c) {&lt;br /&gt;
    // +=c=====================================================+&lt;br /&gt;
    // ++=gcPanel==============================================+&lt;br /&gt;
    // ++ [gcSelection] +&lt;br /&gt;
    // ++=capsPanel============================================+&lt;br /&gt;
    // +++=imageCapsPanel======================================+&lt;br /&gt;
    // +++ [imageAccelerated] +&lt;br /&gt;
    // +++ [imageTrueVolatile] +&lt;br /&gt;
    // +++=bufferCapsPanel=====================================+&lt;br /&gt;
    // ++++=bufferAccessCapsPanel==============================+&lt;br /&gt;
    // +++++=flippingPanel=====================================+&lt;br /&gt;
    // +++++ [flipping] +&lt;br /&gt;
    // +++++=fsPanel===========================================+&lt;br /&gt;
    // +++++ [indentPanel][fullScreen] +&lt;br /&gt;
    // +++++=mbPanel===========================================+&lt;br /&gt;
    // +++++ [indentPanel][multiBuffer] +&lt;br /&gt;
    // ++++=buffersPanel=======================================+&lt;br /&gt;
    // +++++=fbPanel===============+=bbPanel===================+&lt;br /&gt;
    // +++++ + +&lt;br /&gt;
    // +++++ [fbAccelerated] + [bbAccelerated] +&lt;br /&gt;
    // +++++ + +&lt;br /&gt;
    // +++++ [fbTrueVolatile] + [bbTrueVolatile] +&lt;br /&gt;
    // +++++ + +&lt;br /&gt;
    // +=======================================================+&lt;br /&gt;
    c.setLayout(new BorderLayout());&lt;br /&gt;
    // Graphics Config&lt;br /&gt;
    JPanel gcPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));&lt;br /&gt;
    c.add(gcPanel, BorderLayout.NORTH);&lt;br /&gt;
    gcSelection.setPreferredSize(new Dimension(400, 30));&lt;br /&gt;
    gcPanel.add(gcSelection);&lt;br /&gt;
    // Capabilities&lt;br /&gt;
    JPanel capsPanel = new JPanel(new BorderLayout());&lt;br /&gt;
    c.add(capsPanel, BorderLayout.CENTER);&lt;br /&gt;
    // Image Capabilities&lt;br /&gt;
    JPanel imageCapsPanel = new JPanel(new GridLayout(2, 1));&lt;br /&gt;
    capsPanel.add(imageCapsPanel, BorderLayout.NORTH);&lt;br /&gt;
    imageCapsPanel.setBorder(BorderFactory&lt;br /&gt;
        .createTitledBorder(&amp;quot;Image Capabilities&amp;quot;));&lt;br /&gt;
    imageAccelerated.setEnabled(false);&lt;br /&gt;
    imageCapsPanel.add(imageAccelerated);&lt;br /&gt;
    imageTrueVolatile.setEnabled(false);&lt;br /&gt;
    imageCapsPanel.add(imageTrueVolatile);&lt;br /&gt;
    // Buffer Capabilities&lt;br /&gt;
    JPanel bufferCapsPanel = new JPanel(new BorderLayout());&lt;br /&gt;
    capsPanel.add(bufferCapsPanel, BorderLayout.CENTER);&lt;br /&gt;
    bufferCapsPanel.setBorder(BorderFactory&lt;br /&gt;
        .createTitledBorder(&amp;quot;Buffer Capabilities&amp;quot;));&lt;br /&gt;
    // Buffer Access&lt;br /&gt;
    JPanel bufferAccessCapsPanel = new JPanel(new GridLayout(3, 1));&lt;br /&gt;
    bufferAccessCapsPanel.setPreferredSize(new Dimension(300, 88));&lt;br /&gt;
    bufferCapsPanel.add(bufferAccessCapsPanel, BorderLayout.NORTH);&lt;br /&gt;
    // Flipping&lt;br /&gt;
    JPanel flippingPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));&lt;br /&gt;
    bufferAccessCapsPanel.add(flippingPanel);&lt;br /&gt;
    flippingPanel.add(flipping);&lt;br /&gt;
    flipping.setEnabled(false);&lt;br /&gt;
    flippingPanel.add(flippingMethod);&lt;br /&gt;
    // Full-screen&lt;br /&gt;
    JPanel fsPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));&lt;br /&gt;
    bufferAccessCapsPanel.add(fsPanel);&lt;br /&gt;
    JPanel indentPanel = new JPanel();&lt;br /&gt;
    indentPanel.setPreferredSize(new Dimension(30, 30));&lt;br /&gt;
    fsPanel.add(indentPanel);&lt;br /&gt;
    fsPanel.add(fullScreen);&lt;br /&gt;
    fullScreen.setEnabled(false);&lt;br /&gt;
    // Multi-buffering&lt;br /&gt;
    JPanel mbPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));&lt;br /&gt;
    bufferAccessCapsPanel.add(mbPanel);&lt;br /&gt;
    indentPanel = new JPanel();&lt;br /&gt;
    indentPanel.setPreferredSize(new Dimension(30, 30));&lt;br /&gt;
    mbPanel.add(indentPanel);&lt;br /&gt;
    mbPanel.add(multiBuffer);&lt;br /&gt;
    multiBuffer.setEnabled(false);&lt;br /&gt;
    // Front and Back Buffer Capabilities&lt;br /&gt;
    JPanel buffersPanel = new JPanel(new GridLayout(1, 2));&lt;br /&gt;
    bufferCapsPanel.add(buffersPanel, BorderLayout.CENTER);&lt;br /&gt;
    // Front Buffer&lt;br /&gt;
    JPanel fbPanel = new JPanel(new GridLayout(2, 1));&lt;br /&gt;
    fbPanel.setBorder(BorderFactory.createTitledBorder(&amp;quot;Front Buffer&amp;quot;));&lt;br /&gt;
    buffersPanel.add(fbPanel);&lt;br /&gt;
    fbPanel.add(fbAccelerated);&lt;br /&gt;
    fbAccelerated.setEnabled(false);&lt;br /&gt;
    fbPanel.add(fbTrueVolatile);&lt;br /&gt;
    fbTrueVolatile.setEnabled(false);&lt;br /&gt;
    // Back Buffer&lt;br /&gt;
    JPanel bbPanel = new JPanel(new GridLayout(2, 1));&lt;br /&gt;
    bbPanel.setPreferredSize(new Dimension(250, 80));&lt;br /&gt;
    bbPanel.setBorder(BorderFactory&lt;br /&gt;
        .createTitledBorder(&amp;quot;Back and Intermediate Buffers&amp;quot;));&lt;br /&gt;
    buffersPanel.add(bbPanel);&lt;br /&gt;
    bbPanel.add(bbAccelerated);&lt;br /&gt;
    bbAccelerated.setEnabled(false);&lt;br /&gt;
    bbPanel.add(bbTrueVolatile);&lt;br /&gt;
    bbTrueVolatile.setEnabled(false);&lt;br /&gt;
  }&lt;br /&gt;
  public void itemStateChanged(ItemEvent ev) {&lt;br /&gt;
    gcChanged();&lt;br /&gt;
  }&lt;br /&gt;
  private void gcChanged() {&lt;br /&gt;
    GCWrapper wrap = (GCWrapper) gcSelection.getSelectedItem();&lt;br /&gt;
    //assert wrap != null;&lt;br /&gt;
    GraphicsConfiguration gc = wrap.getGC();&lt;br /&gt;
    //assert gc != null;&lt;br /&gt;
    //Image Caps&lt;br /&gt;
    ImageCapabilities imageCaps = gc.getImageCapabilities();&lt;br /&gt;
    imageAccelerated.setSelected(imageCaps.isAccelerated());&lt;br /&gt;
    imageTrueVolatile.setSelected(imageCaps.isTrueVolatile());&lt;br /&gt;
    // Buffer Caps&lt;br /&gt;
    BufferCapabilities bufferCaps = gc.getBufferCapabilities();&lt;br /&gt;
    flipping.setSelected(bufferCaps.isPageFlipping());&lt;br /&gt;
    flippingMethod.setText(getFlipText(bufferCaps.getFlipContents()));&lt;br /&gt;
    fullScreen.setSelected(bufferCaps.isFullScreenRequired());&lt;br /&gt;
    multiBuffer.setSelected(bufferCaps.isMultiBufferAvailable());&lt;br /&gt;
    // Front buffer caps&lt;br /&gt;
    imageCaps = bufferCaps.getFrontBufferCapabilities();&lt;br /&gt;
    fbAccelerated.setSelected(imageCaps.isAccelerated());&lt;br /&gt;
    fbTrueVolatile.setSelected(imageCaps.isTrueVolatile());&lt;br /&gt;
    imageCaps = bufferCaps.getFrontBufferCapabilities();&lt;br /&gt;
    // Back buffer caps&lt;br /&gt;
    imageCaps = bufferCaps.getBackBufferCapabilities();&lt;br /&gt;
    bbAccelerated.setSelected(imageCaps.isAccelerated());&lt;br /&gt;
    bbTrueVolatile.setSelected(imageCaps.isTrueVolatile());&lt;br /&gt;
  }&lt;br /&gt;
  private static String getFlipText(BufferCapabilities.FlipContents flip) {&lt;br /&gt;
    if (flip == null) {&lt;br /&gt;
      return &amp;quot;&amp;quot;;&lt;br /&gt;
    } else if (flip == BufferCapabilities.FlipContents.UNDEFINED) {&lt;br /&gt;
      return &amp;quot;Method Unspecified&amp;quot;;&lt;br /&gt;
    } else if (flip == BufferCapabilities.FlipContents.BACKGROUND) {&lt;br /&gt;
      return &amp;quot;Cleared to Background&amp;quot;;&lt;br /&gt;
    } else if (flip == BufferCapabilities.FlipContents.PRIOR) {&lt;br /&gt;
      return &amp;quot;Previous Front Buffer&amp;quot;;&lt;br /&gt;
    } else { // if (flip == BufferCapabilities.FlipContents.COPIED)&lt;br /&gt;
      return &amp;quot;Copied&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    GraphicsEnvironment ge = GraphicsEnvironment&lt;br /&gt;
        .getLocalGraphicsEnvironment();&lt;br /&gt;
    GraphicsDevice[] devices = ge.getScreenDevices();&lt;br /&gt;
    for (int i = 0; i &amp;lt; devices.length; i++) {&lt;br /&gt;
      CapabilitiesTest tst = new CapabilitiesTest(devices[i]);&lt;br /&gt;
      tst.pack();&lt;br /&gt;
      tst.setVisible(true);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Full screen: Display Mode Test ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions are met:&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution of source code must retain the above copyright notice, this&lt;br /&gt;
 *  list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution in binary form must reproduce the above copyright notice,&lt;br /&gt;
 *  this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
 *  and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may&lt;br /&gt;
 * be used to endorse or promote products derived from this software without&lt;br /&gt;
 * specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST&lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,&lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY&lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
/*&lt;br /&gt;
 test @(#)DisplayModeTest.java  1.4 01/07/17&lt;br /&gt;
 @bug 4189326&lt;br /&gt;
 @summary Tests changing display mode&lt;br /&gt;
 @author martak@eng: area=FullScreen&lt;br /&gt;
 @ignore This test enters full-screen mode, if available, and should not&lt;br /&gt;
 be run as an applet or as part of the test harness.&lt;br /&gt;
 */&lt;br /&gt;
/**&lt;br /&gt;
 * This test generates a table of all available display modes, enters&lt;br /&gt;
 * full-screen mode, if available, and allows you to change the display mode.&lt;br /&gt;
 * The application should look fine under each enumerated display mode. On UNIX,&lt;br /&gt;
 * only a single display mode should be available, and on Microsoft Windows,&lt;br /&gt;
 * display modes should depend on direct draw availability and the type of&lt;br /&gt;
 * graphics card.&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.DisplayMode;&lt;br /&gt;
import java.awt.FlowLayout;&lt;br /&gt;
import java.awt.GraphicsDevice;&lt;br /&gt;
import java.awt.GraphicsEnvironment;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTable;&lt;br /&gt;
import javax.swing.ListSelectionModel;&lt;br /&gt;
import javax.swing.event.ListSelectionEvent;&lt;br /&gt;
import javax.swing.event.ListSelectionListener;&lt;br /&gt;
import javax.swing.table.DefaultTableModel;&lt;br /&gt;
import javax.swing.table.TableColumn;&lt;br /&gt;
class DisplayModeModel extends DefaultTableModel {&lt;br /&gt;
  private DisplayMode[] modes;&lt;br /&gt;
  public DisplayModeModel(DisplayMode[] modes) {&lt;br /&gt;
    this.modes = modes;&lt;br /&gt;
  }&lt;br /&gt;
  public DisplayMode getDisplayMode(int r) {&lt;br /&gt;
    return modes[r];&lt;br /&gt;
  }&lt;br /&gt;
  public String getColumnName(int c) {&lt;br /&gt;
    return DisplayModeTest.COLUMN_NAMES[c];&lt;br /&gt;
  }&lt;br /&gt;
  public int getColumnCount() {&lt;br /&gt;
    return DisplayModeTest.COLUMN_WIDTHS.length;&lt;br /&gt;
  }&lt;br /&gt;
  public boolean isCellEditable(int r, int c) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  public int getRowCount() {&lt;br /&gt;
    if (modes == null) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return modes.length;&lt;br /&gt;
  }&lt;br /&gt;
  public Object getValueAt(int rowIndex, int colIndex) {&lt;br /&gt;
    DisplayMode dm = modes[rowIndex];&lt;br /&gt;
    switch (colIndex) {&lt;br /&gt;
    case DisplayModeTest.INDEX_WIDTH:&lt;br /&gt;
      return Integer.toString(dm.getWidth());&lt;br /&gt;
    case DisplayModeTest.INDEX_HEIGHT:&lt;br /&gt;
      return Integer.toString(dm.getHeight());&lt;br /&gt;
    case DisplayModeTest.INDEX_BITDEPTH: {&lt;br /&gt;
      int bitDepth = dm.getBitDepth();&lt;br /&gt;
      String ret;&lt;br /&gt;
      if (bitDepth == DisplayMode.BIT_DEPTH_MULTI) {&lt;br /&gt;
        ret = &amp;quot;Multi&amp;quot;;&lt;br /&gt;
      } else {&lt;br /&gt;
        ret = Integer.toString(bitDepth);&lt;br /&gt;
      }&lt;br /&gt;
      return ret;&lt;br /&gt;
    }&lt;br /&gt;
    case DisplayModeTest.INDEX_REFRESHRATE: {&lt;br /&gt;
      int refreshRate = dm.getRefreshRate();&lt;br /&gt;
      String ret;&lt;br /&gt;
      if (refreshRate == DisplayMode.REFRESH_RATE_UNKNOWN) {&lt;br /&gt;
        ret = &amp;quot;Unknown&amp;quot;;&lt;br /&gt;
      } else {&lt;br /&gt;
        ret = Integer.toString(refreshRate);&lt;br /&gt;
      }&lt;br /&gt;
      return ret;&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
    throw new ArrayIndexOutOfBoundsException(&amp;quot;Invalid column value&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class DisplayModeTest extends JFrame implements ActionListener,&lt;br /&gt;
    ListSelectionListener {&lt;br /&gt;
  private boolean waiting = false;&lt;br /&gt;
  private GraphicsDevice device;&lt;br /&gt;
  private DisplayMode originalDM;&lt;br /&gt;
  private JButton exit = new JButton(&amp;quot;Exit&amp;quot;);&lt;br /&gt;
  private JButton changeDM = new JButton(&amp;quot;Set Display&amp;quot;);&lt;br /&gt;
  private JLabel currentDM = new JLabel();&lt;br /&gt;
  private JTable dmList = new JTable();&lt;br /&gt;
  private JScrollPane dmPane = new JScrollPane(dmList);&lt;br /&gt;
  private boolean isFullScreen = false;&lt;br /&gt;
  public static final int INDEX_WIDTH = 0;&lt;br /&gt;
  public static final int INDEX_HEIGHT = 1;&lt;br /&gt;
  public static final int INDEX_BITDEPTH = 2;&lt;br /&gt;
  public static final int INDEX_REFRESHRATE = 3;&lt;br /&gt;
  public static final int[] COLUMN_WIDTHS = new int[] { 100, 100, 100, 100 };&lt;br /&gt;
  public static final String[] COLUMN_NAMES = new String[] { &amp;quot;Width&amp;quot;,&lt;br /&gt;
      &amp;quot;Height&amp;quot;, &amp;quot;Bit Depth&amp;quot;, &amp;quot;Refresh Rate&amp;quot; };&lt;br /&gt;
  public DisplayModeTest(GraphicsDevice device) {&lt;br /&gt;
    super(device.getDefaultConfiguration());&lt;br /&gt;
    this.device = device;&lt;br /&gt;
    setTitle(&amp;quot;Display Mode Test&amp;quot;);&lt;br /&gt;
    originalDM = device.getDisplayMode();&lt;br /&gt;
    setDMLabel(originalDM);&lt;br /&gt;
    setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;
    // Make sure a DM is always selected in the list&lt;br /&gt;
    exit.addActionListener(this);&lt;br /&gt;
    changeDM.addActionListener(this);&lt;br /&gt;
    changeDM.setEnabled(device.isDisplayChangeSupported());&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent ev) {&lt;br /&gt;
    Object source = ev.getSource();&lt;br /&gt;
    if (source == exit) {&lt;br /&gt;
      device.setDisplayMode(originalDM);&lt;br /&gt;
      System.exit(0);&lt;br /&gt;
    } else { // if (source == changeDM)&lt;br /&gt;
      int index = dmList.getSelectionModel().getAnchorSelectionIndex();&lt;br /&gt;
      if (index &amp;gt;= 0) {&lt;br /&gt;
        DisplayModeModel model = (DisplayModeModel) dmList.getModel();&lt;br /&gt;
        DisplayMode dm = model.getDisplayMode(index);&lt;br /&gt;
        device.setDisplayMode(dm);&lt;br /&gt;
        setDMLabel(dm);&lt;br /&gt;
        setSize(new Dimension(dm.getWidth(), dm.getHeight()));&lt;br /&gt;
        validate();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void valueChanged(ListSelectionEvent ev) {&lt;br /&gt;
    changeDM.setEnabled(device.isDisplayChangeSupported());&lt;br /&gt;
  }&lt;br /&gt;
  private void initComponents(Container c) {&lt;br /&gt;
    setContentPane(c);&lt;br /&gt;
    c.setLayout(new BorderLayout());&lt;br /&gt;
    // Current DM&lt;br /&gt;
    JPanel currentPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));&lt;br /&gt;
    c.add(currentPanel, BorderLayout.NORTH);&lt;br /&gt;
    JLabel current = new JLabel(&amp;quot;Current Display Mode : &amp;quot;);&lt;br /&gt;
    currentPanel.add(current);&lt;br /&gt;
    currentPanel.add(currentDM);&lt;br /&gt;
    // Display Modes&lt;br /&gt;
    JPanel modesPanel = new JPanel(new GridLayout(1, 2));&lt;br /&gt;
    c.add(modesPanel, BorderLayout.CENTER);&lt;br /&gt;
    // List of display modes&lt;br /&gt;
    for (int i = 0; i &amp;lt; COLUMN_WIDTHS.length; i++) {&lt;br /&gt;
      TableColumn col = new TableColumn(i, COLUMN_WIDTHS[i]);&lt;br /&gt;
      col.setIdentifier(COLUMN_NAMES[i]);&lt;br /&gt;
      col.setHeaderValue(COLUMN_NAMES[i]);&lt;br /&gt;
      dmList.addColumn(col);&lt;br /&gt;
    }&lt;br /&gt;
    dmList.getSelectionModel().setSelectionMode(&lt;br /&gt;
        ListSelectionModel.SINGLE_SELECTION);&lt;br /&gt;
    dmList.getSelectionModel().addListSelectionListener(this);&lt;br /&gt;
    modesPanel.add(dmPane);&lt;br /&gt;
    // Controls&lt;br /&gt;
    JPanel controlsPanelA = new JPanel(new BorderLayout());&lt;br /&gt;
    modesPanel.add(controlsPanelA);&lt;br /&gt;
    JPanel controlsPanelB = new JPanel(new GridLayout(2, 1));&lt;br /&gt;
    controlsPanelA.add(controlsPanelB, BorderLayout.NORTH);&lt;br /&gt;
    // Exit&lt;br /&gt;
    JPanel exitPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));&lt;br /&gt;
    controlsPanelB.add(exitPanel);&lt;br /&gt;
    exitPanel.add(exit);&lt;br /&gt;
    // Change DM&lt;br /&gt;
    JPanel changeDMPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));&lt;br /&gt;
    controlsPanelB.add(changeDMPanel);&lt;br /&gt;
    changeDMPanel.add(changeDM);&lt;br /&gt;
    controlsPanelA.add(new JPanel(), BorderLayout.CENTER);&lt;br /&gt;
  }&lt;br /&gt;
  public void setVisible(boolean isVis) {&lt;br /&gt;
    super.setVisible(isVis);&lt;br /&gt;
    if (isVis) {&lt;br /&gt;
      dmList.setModel(new DisplayModeModel(device.getDisplayModes()));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void setDMLabel(DisplayMode newMode) {&lt;br /&gt;
    int bitDepth = newMode.getBitDepth();&lt;br /&gt;
    int refreshRate = newMode.getRefreshRate();&lt;br /&gt;
    String bd, rr;&lt;br /&gt;
    if (bitDepth == DisplayMode.BIT_DEPTH_MULTI) {&lt;br /&gt;
      bd = &amp;quot;Multi&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      bd = Integer.toString(bitDepth);&lt;br /&gt;
    }&lt;br /&gt;
    if (refreshRate == DisplayMode.REFRESH_RATE_UNKNOWN) {&lt;br /&gt;
      rr = &amp;quot;Unknown&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      rr = Integer.toString(refreshRate);&lt;br /&gt;
    }&lt;br /&gt;
    currentDM.setText(COLUMN_NAMES[INDEX_WIDTH] + &amp;quot;: &amp;quot; + newMode.getWidth()&lt;br /&gt;
        + &amp;quot; &amp;quot; + COLUMN_NAMES[INDEX_HEIGHT] + &amp;quot;: &amp;quot; + newMode.getHeight()&lt;br /&gt;
        + &amp;quot; &amp;quot; + COLUMN_NAMES[INDEX_BITDEPTH] + &amp;quot;: &amp;quot; + bd + &amp;quot; &amp;quot;&lt;br /&gt;
        + COLUMN_NAMES[INDEX_REFRESHRATE] + &amp;quot;: &amp;quot; + rr);&lt;br /&gt;
  }&lt;br /&gt;
  public void begin() {&lt;br /&gt;
    isFullScreen = device.isFullScreenSupported();&lt;br /&gt;
    setUndecorated(isFullScreen);&lt;br /&gt;
    setResizable(!isFullScreen);&lt;br /&gt;
    if (isFullScreen) {&lt;br /&gt;
      // Full-screen mode&lt;br /&gt;
      device.setFullScreenWindow(this);&lt;br /&gt;
      validate();&lt;br /&gt;
    } else {&lt;br /&gt;
      // Windowed mode&lt;br /&gt;
      pack();&lt;br /&gt;
      setVisible(true);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    GraphicsEnvironment env = GraphicsEnvironment&lt;br /&gt;
        .getLocalGraphicsEnvironment();&lt;br /&gt;
    GraphicsDevice[] devices = env.getScreenDevices();&lt;br /&gt;
    // REMIND : Multi-monitor full-screen mode not yet supported&lt;br /&gt;
    for (int i = 0; i &amp;lt; 1 /* devices.length */; i++) {&lt;br /&gt;
      DisplayModeTest test = new DisplayModeTest(devices[i]);&lt;br /&gt;
      test.initComponents(test.getContentPane());&lt;br /&gt;
      test.begin();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Full screen:MultiBuffer Test  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions are met:&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution of source code must retain the above copyright notice, this&lt;br /&gt;
 *  list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution in binary form must reproduce the above copyright notice,&lt;br /&gt;
 *  this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
 *  and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may&lt;br /&gt;
 * be used to endorse or promote products derived from this software without&lt;br /&gt;
 * specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST&lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,&lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY&lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
/**&lt;br /&gt;
 * This test takes a number up to 13 as an argument (assumes 2 by default) and&lt;br /&gt;
 * creates a multiple buffer strategy with the number of buffers given. This&lt;br /&gt;
 * application enters full-screen mode, if available, and flips back and forth&lt;br /&gt;
 * between each buffer (each signified by a different color).&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.DisplayMode;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.GraphicsConfiguration;&lt;br /&gt;
import java.awt.GraphicsDevice;&lt;br /&gt;
import java.awt.GraphicsEnvironment;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.image.BufferStrategy;&lt;br /&gt;
public class MultiBufferTest {&lt;br /&gt;
  private static Color[] COLORS = new Color[] { Color.red, Color.blue,&lt;br /&gt;
      Color.green, Color.white, Color.black, Color.yellow, Color.gray,&lt;br /&gt;
      Color.cyan, Color.pink, Color.lightGray, Color.magenta,&lt;br /&gt;
      Color.orange, Color.darkGray };&lt;br /&gt;
  private static DisplayMode[] BEST_DISPLAY_MODES = new DisplayMode[] {&lt;br /&gt;
      new DisplayMode(640, 480, 32, 0), new DisplayMode(640, 480, 16, 0),&lt;br /&gt;
      new DisplayMode(640, 480, 8, 0) };&lt;br /&gt;
  Frame mainFrame;&lt;br /&gt;
  public MultiBufferTest(int numBuffers, GraphicsDevice device) {&lt;br /&gt;
    try {&lt;br /&gt;
      GraphicsConfiguration gc = device.getDefaultConfiguration();&lt;br /&gt;
      mainFrame = new Frame(gc);&lt;br /&gt;
      mainFrame.setUndecorated(true);&lt;br /&gt;
      mainFrame.setIgnoreRepaint(true);&lt;br /&gt;
      device.setFullScreenWindow(mainFrame);&lt;br /&gt;
      if (device.isDisplayChangeSupported()) {&lt;br /&gt;
        chooseBestDisplayMode(device);&lt;br /&gt;
      }&lt;br /&gt;
      Rectangle bounds = mainFrame.getBounds();&lt;br /&gt;
      mainFrame.createBufferStrategy(numBuffers);&lt;br /&gt;
      BufferStrategy bufferStrategy = mainFrame.getBufferStrategy();&lt;br /&gt;
      for (float lag = 2000.0f; lag &amp;gt; 0.00000006f; lag = lag / 1.33f) {&lt;br /&gt;
        for (int i = 0; i &amp;lt; numBuffers; i++) {&lt;br /&gt;
          Graphics g = bufferStrategy.getDrawGraphics();&lt;br /&gt;
          if (!bufferStrategy.contentsLost()) {&lt;br /&gt;
            g.setColor(COLORS[i]);&lt;br /&gt;
            g.fillRect(0, 0, bounds.width, bounds.height);&lt;br /&gt;
            bufferStrategy.show();&lt;br /&gt;
            g.dispose();&lt;br /&gt;
          }&lt;br /&gt;
          try {&lt;br /&gt;
            Thread.sleep((int) lag);&lt;br /&gt;
          } catch (InterruptedException e) {&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    } finally {&lt;br /&gt;
      device.setFullScreenWindow(null);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private static DisplayMode getBestDisplayMode(GraphicsDevice device) {&lt;br /&gt;
    for (int x = 0; x &amp;lt; BEST_DISPLAY_MODES.length; x++) {&lt;br /&gt;
      DisplayMode[] modes = device.getDisplayModes();&lt;br /&gt;
      for (int i = 0; i &amp;lt; modes.length; i++) {&lt;br /&gt;
        if (modes[i].getWidth() == BEST_DISPLAY_MODES[x].getWidth()&lt;br /&gt;
            &amp;amp;&amp;amp; modes[i].getHeight() == BEST_DISPLAY_MODES[x]&lt;br /&gt;
                .getHeight()&lt;br /&gt;
            &amp;amp;&amp;amp; modes[i].getBitDepth() == BEST_DISPLAY_MODES[x]&lt;br /&gt;
                .getBitDepth()) {&lt;br /&gt;
          return BEST_DISPLAY_MODES[x];&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
  public static void chooseBestDisplayMode(GraphicsDevice device) {&lt;br /&gt;
    DisplayMode best = getBestDisplayMode(device);&lt;br /&gt;
    if (best != null) {&lt;br /&gt;
      device.setDisplayMode(best);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    try {&lt;br /&gt;
      int numBuffers = 2;&lt;br /&gt;
      if (args != null &amp;amp;&amp;amp; args.length &amp;gt; 0) {&lt;br /&gt;
        numBuffers = Integer.parseInt(args[0]);&lt;br /&gt;
        if (numBuffers &amp;lt; 2 || numBuffers &amp;gt; COLORS.length) {&lt;br /&gt;
          System.err.println(&amp;quot;Must specify between 2 and &amp;quot;&lt;br /&gt;
              + COLORS.length + &amp;quot; buffers&amp;quot;);&lt;br /&gt;
          System.exit(1);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      GraphicsEnvironment env = GraphicsEnvironment&lt;br /&gt;
          .getLocalGraphicsEnvironment();&lt;br /&gt;
      GraphicsDevice device = env.getDefaultScreenDevice();&lt;br /&gt;
      MultiBufferTest test = new MultiBufferTest(numBuffers, device);&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
    System.exit(0);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Full screen test ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.DisplayMode;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.GraphicsDevice;&lt;br /&gt;
import java.awt.GraphicsEnvironment;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.image.BufferStrategy;&lt;br /&gt;
public class FullScreen {&lt;br /&gt;
  private static int counter = 0;&lt;br /&gt;
  private static final int MAX = 50;&lt;br /&gt;
  private static DisplayMode MODES[] = new DisplayMode[] {&lt;br /&gt;
      new DisplayMode(640, 480, 32, 0), new DisplayMode(640, 480, 16, 0),&lt;br /&gt;
      new DisplayMode(640, 480, 8, 0) };&lt;br /&gt;
  private static DisplayMode getBestDisplayMode(GraphicsDevice device) {&lt;br /&gt;
    for (int x = 0, xn = MODES.length; x &amp;lt; xn; x++) {&lt;br /&gt;
      DisplayMode[] modes = device.getDisplayModes();&lt;br /&gt;
      for (int i = 0, in = modes.length; i &amp;lt; in; i++) {&lt;br /&gt;
        if (modes[i].getWidth() == MODES[x].getWidth()&lt;br /&gt;
            &amp;amp;&amp;amp; modes[i].getHeight() == MODES[x].getHeight()&lt;br /&gt;
            &amp;amp;&amp;amp; modes[i].getBitDepth() == MODES[x].getBitDepth()) {&lt;br /&gt;
          return MODES[x];&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment&lt;br /&gt;
        .getLocalGraphicsEnvironment();&lt;br /&gt;
    GraphicsDevice graphicsDevice = graphicsEnvironment&lt;br /&gt;
        .getDefaultScreenDevice();&lt;br /&gt;
    DisplayMode originalDisplayMode = graphicsDevice.getDisplayMode();&lt;br /&gt;
    try {&lt;br /&gt;
      Frame frame = new Frame();&lt;br /&gt;
      frame.setUndecorated(true);&lt;br /&gt;
      frame.setIgnoreRepaint(true);&lt;br /&gt;
      graphicsDevice.setFullScreenWindow(frame);&lt;br /&gt;
      if (graphicsDevice.isDisplayChangeSupported()) {&lt;br /&gt;
        graphicsDevice&lt;br /&gt;
            .setDisplayMode(getBestDisplayMode(graphicsDevice));&lt;br /&gt;
      }&lt;br /&gt;
      frame.createBufferStrategy(2); // 2 buffers&lt;br /&gt;
      Rectangle bounds = frame.getBounds();&lt;br /&gt;
      BufferStrategy bufferStrategy = frame.getBufferStrategy();&lt;br /&gt;
      while (!done()) {&lt;br /&gt;
        Graphics g = null;&lt;br /&gt;
        try {&lt;br /&gt;
          g = bufferStrategy.getDrawGraphics();&lt;br /&gt;
          if ((counter &amp;lt;= 2)) { // 2 buffers&lt;br /&gt;
            g.setColor(Color.CYAN);&lt;br /&gt;
            g.fillRect(0, 0, bounds.width, bounds.height);&lt;br /&gt;
          }&lt;br /&gt;
          g.setColor(Color.RED);&lt;br /&gt;
          // redraw prior line, too, since 2 buffers&lt;br /&gt;
          if (counter != 1) {&lt;br /&gt;
            g.drawLine(counter - 1, (counter - 1) * 5,&lt;br /&gt;
                bounds.width, bounds.height);&lt;br /&gt;
          }&lt;br /&gt;
          g.drawLine(counter, counter * 5, bounds.width,&lt;br /&gt;
              bounds.height);&lt;br /&gt;
          bufferStrategy.show();&lt;br /&gt;
        } finally {&lt;br /&gt;
          if (g != null) {&lt;br /&gt;
            g.dispose();&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        try {&lt;br /&gt;
          Thread.sleep(250);&lt;br /&gt;
        } catch (InterruptedException ignored) {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } finally {&lt;br /&gt;
      graphicsDevice.setDisplayMode(originalDisplayMode);&lt;br /&gt;
      graphicsDevice.setFullScreenWindow(null);&lt;br /&gt;
    }&lt;br /&gt;
    System.exit(0);&lt;br /&gt;
  }&lt;br /&gt;
  private static boolean done() {&lt;br /&gt;
    return (counter++ == MAX);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>