package Render;import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*;public class JScreen extends Frame { // the DisplayMode that the user wanna to use final int BufferNumber = 2;
final static int supportedModes[][] = { {640, 480, 32}, {640, 480, 16}, {640, 480, 8}, };
public boolean setDisplayMode(DisplayMode m) { if( !isSupportedMode(m) ) return false;
DisplayMode[] modes = gd.getDisplayModes(); for(int i = 0; i < modes.length; i++) { if(m.equals(modes[i])) { gd.setDisplayMode(m); curDispMode = m; return true; } } return false; } public void printCap() { BufferCapabilities bc = gd.getDefaultConfiguration().getBufferCapabilities();
if(!gd.isFullScreenSupported()) System.out.println("FullScreen NOT Supported!"); else System.out.println("FullScreen Supported!");
if(bc.isPageFlipping()) System.out.println("PageFlipping Supported!"); else System.out.println("PageFlipping NOT Supported!"); if(bc.isMultiBufferAvailable()) System.out.println("MultiBuffer Supported!"); else System.out.println("MultiBuffer NOT Supported!");
if(bc.isFullScreenRequired()) System.out.println("FullScreen Required for PageFlipping!"); else System.out.println("FullScreen NOT Required for PageFlipping!");
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;public class JScreen extends Frame
{
// the DisplayMode that the user wanna to use
final int BufferNumber = 2;
final static int supportedModes[][] = {
{640, 480, 32},
{640, 480, 16},
{640, 480, 8},
};
private boolean isFullScreen = false; private GraphicsEnvironment ge;
private final GraphicsDevice gd;
private DisplayMode oldDispMode;
private DisplayMode curDispMode;
public boolean isActive()
{
return isFullScreen;
}
public boolean isSupportedMode(DisplayMode dm)
{
for(int i = 0; i < supportedModes.length; i++)
{
if(supportedModes[i][0] == dm.getWidth()
&& supportedModes[i][1] == dm.getHeight()
&& supportedModes[i][2] == dm.getBitDepth() )
return true;
}
return false;
}
public GraphicsDevice getScreenGraphicsDevice()
{
return gd;
}
public void quit()
{
setVisible(false);
isFullScreen = false;
}
public void start()
{
gd.setFullScreenWindow(this); DisplayMode[] modes = gd.getDisplayModes();
for(int i = 0; i < modes.length; i++)
{
if(isSupportedMode(modes[i]))
{
gd.setDisplayMode(modes[i]);
curDispMode = modes[i];
}
} setVisible(true);
isFullScreen = true;
}
public boolean setDisplayMode(DisplayMode m)
{
if( !isSupportedMode(m) ) return false;
DisplayMode[] modes = gd.getDisplayModes();
for(int i = 0; i < modes.length; i++)
{
if(m.equals(modes[i]))
{
gd.setDisplayMode(m);
curDispMode = m;
return true;
}
}
return false;
}
public void printCap()
{
BufferCapabilities bc =
gd.getDefaultConfiguration().getBufferCapabilities();
if(!gd.isFullScreenSupported())
System.out.println("FullScreen NOT Supported!");
else System.out.println("FullScreen Supported!");
if(bc.isPageFlipping())
System.out.println("PageFlipping Supported!");
else System.out.println("PageFlipping NOT Supported!"); if(bc.isMultiBufferAvailable())
System.out.println("MultiBuffer Supported!");
else System.out.println("MultiBuffer NOT Supported!");
if(bc.isFullScreenRequired())
System.out.println("FullScreen Required for PageFlipping!");
else System.out.println("FullScreen NOT Required for PageFlipping!");
BufferCapabilities.FlipContents bcf = bc.getFlipContents();
if(bcf.equals(bcf.COPIED))
System.out.println("Flipping Type: COPIED");
if(bcf.equals(bcf.BACKGROUND))
System.out.println("Flipping Type: BACKGROUND");
if(bcf.equals(bcf.PRIOR))
System.out.println("Flipping Type: PRIOR");
if(bcf.equals(bcf.UNDEFINED))
System.out.println("Flipping Type: UNDEFINED");
}
public JScreen(String name)
{
super(name);
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
gd = ge.getDefaultScreenDevice();
oldDispMode = gd.getDisplayMode();
printCap();
setBackground(Color.BLACK);
setUndecorated(true);
setResizable(false);
setIgnoreRepaint(true); addKeyListener(new KeyAdapter()
{
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_ESCAPE)
{
gd.setFullScreenWindow(null);
System.exit(0);
}
if(e.getKeyCode() == KeyEvent.VK_SPACE)
{
quit();
}
}
}
);
}
public static void main(String args[])
{
JScreen js = new JScreen("Test");
js.start();
}
}
//////////////////////////////////////////////////////////////
import Render.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;public class FullScreenSample
{
Image im;
JScreen w;
public FullScreenSample()
{
w = new JScreen("FullScreen Exclusive Mode"); loadImage("show.gif");
w.start();
render();
w.quit();
}
public void loadImage(String s)
{
Toolkit tk = Toolkit.getDefaultToolkit();
im = tk.getImage(s);
MediaTracker mt = new MediaTracker(w);
mt.addImage(im, 0);
try
{
mt.waitForAll();
}
catch(InterruptedException e)
{}
if( (mt.statusAll(false) & MediaTracker.ERRORED) != 0)
{
System.exit(0);
} }
public void render()
{
w.createBufferStrategy(2);
BufferStrategy bs = w.getBufferStrategy();
Graphics g = bs.getDrawGraphics();
for(int i = 0; i < 5000; i ++)
{
g.setColor(Color.RED);
g.fillRect(0, 0, 640, 480);
g.drawImage(im, i, 50, w);
bs.show();
}
g.dispose();
}
public static void main(String[] args)
{
new FullScreenSample();
}
}
{
Image im;
JScreen w;
/*********************************/
boolean running=true;
int fr=0;
BufferStrategy bs=null;
/********************************/
public FullScreenSample()
{
w = new JScreen("FullScreen Exclusive Mode"); loadImage("show.gif");
w.start();
/******************************************/
w.createBufferStrategy(2);
bs = w.getBufferStrategy();
while(running){
render();
try{
Thread.sleep(50);
} catch(InterruptedException e){}
}
/****************************************/
w.quit();
}
public void loadImage(String s)
{
Toolkit tk = Toolkit.getDefaultToolkit();
im = tk.getImage(s);
MediaTracker mt = new MediaTracker(w);
mt.addImage(im, 0);
try
{
mt.waitForAll();
}
catch(InterruptedException e)
{}
if( (mt.statusAll(false) & MediaTracker.ERRORED) != 0)
{
System.exit(0);
} }
public void render()
{
/**********************************/
if(fr<500)
fr++;
else
running=false;
Graphics g = bs.getDrawGraphics();
g.setColor(Color.RED);
g.fillRect(0, 0, 640, 480);
g.drawImage(im, fr, 50, null);
bs.show();
/****************************/
g.dispose();
}
public static void main(String[] args)
{
new FullScreenSample();
}
}
wobelisk()兄这样改的意思是什么呢?
偶不是很明白。还有想请教,偶这样子这个东东有没有违反线程安全准则?