■正拳突きのHP:プログラムチップス(java swing)マルチモニタ対応フルスクリーン設定/解除
* 作成日:2009/02/08
* 作成環境:windows XP java1.6 eclipse4.4
* ウィンドウの座標と、各画面の範囲を比較し、それっぽい画面にフルスクリーン表示します。
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
/**
* マルチモニタ対応フルスクリーン設定/解除
* ウィンドウの座標と、各画面の範囲を比較し、それっぽい画面にフルスクリーン表示します。
* 作成日:2009/02/08
* 作成環境:windows XP java1.6 eclipse4.4
*/
public class FullScreenSample extends JFrame {
protected GraphicsDevice device = null;
public static void main(String[] args) {
FullScreenSample f = new FullScreenSample();
f.setVisible(true);
}
public FullScreenSample() {
addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
setFullScreen();
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
});
setBounds(100, 100, 400, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JLabel label = new JLabel("クリックするとフルスクリーンになったり戻ったりします。");
add(label);
}
private void setFullScreen() {
// デコレーションの有無でフルスクリーン設定/解除を切り替える。
setFullScreen(!isUndecorated());
}
private void setFullScreen(boolean fullFlg) {
if (fullFlg) {
// GraphicsDevice取得
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
// フレームの4隅と中央の座標取得
Point center = new Point((int)this.getBounds().getCenterX(),(int)this.getBounds().getCenterY());
Point a = new Point((int)this.getBounds().getMinX(),(int)this.getBounds().getMinY());
Point b = new Point((int)this.getBounds().getMaxX(),(int)this.getBounds().getMinY());
Point c = new Point((int)this.getBounds().getMaxX(),(int)this.getBounds().getMaxY());
Point d = new Point((int)this.getBounds().getMaxX(),(int)this.getBounds().getMinY());
Point[] plist = {d,c,b,center,a};
device = null;
// フレームの座標と、画面の範囲を比較し、フルスクリーン表示する画面を決定
GraphicsDevice[] glist = ge.getScreenDevices();
String s = "";
for (Point p : plist) {
for(GraphicsDevice g : glist) {
if (g.getDefaultConfiguration().getBounds().contains(p)) {
s = g.toString();
break;
}
}
}
/*
* 1回目のループでtoStringを使い文字列を取得。
* 2回目のループで文字列を比較しGraphicsDevice。
* 通常の環境では1回目のループで取得すればよいと思うのですが、
* 作者の環境では、それだとフルスクリーン解除時にエラーがでるんです(;;
*/
glist = ge.getScreenDevices();
for(GraphicsDevice g : glist) {
if (s.equals(g.toString())) {
device = g;
break;
}
}
// 画面が取得できていない場合、デフォルトスクリーン
if (device == null) {
device = ge.getDefaultScreenDevice();
}
// フルスクリーン設定
dispose();
setVisible(false);
setUndecorated(true);
device.setFullScreenWindow(this);
setVisible(true);
} else {
// フルスクリーン解除
dispose();
setVisible(false);
setUndecorated(false);
device.setFullScreenWindow(null);
setVisible(true);
device = null;
}
}
}
TOPに戻る