package hayashi.yuu.register;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* 「タッチパネル画面」
*
*/
public class TouchScreen extends JFrame implements Runnable
{
MainPanel mainPanel; // キャビネット内のキータグ状況を表す
/**
* コンストラクタ
*
* 画面サイズ: 800 x 600
*
*/
public TouchScreen(String siteName) throws Exception {
super();
this.setUndecorated(true);
this.startModePanel = new StartModePanel(this);
setLayout(new BorderLayout());
this.setVisible(false);
this.setSize(800, 600);
/*
* タイトルパネル
* 'proxSafe Commander3'のロゴイメージと、ターミナル名称
*
* 画面サイズ: 800 x 600
*/
TitlePanel titlePanel = new TitlePanel();
add(BorderLayout.NORTH, titlePanel);
/*
* メインパネル
* [ニュートラル表示]パネル
*
* 画面サイズ: 800 x ?
*/
printStartMessage();
add(BorderLayout.CENTER, mainPanel);
/*
* フッターパネル
*
*/
FooterPanel footerPanel = new FooterPanel(siteName);
add(BorderLayout.SOUTH, footerPanel);
setVisible(true);
SymWindow aSymWindow = new SymWindow();
addWindowListener(aSymWindow);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//
// Frame に関するメソッド
//
public void init() {
setVisible(true);
//Thread threadA = new Thread(this);
//threadA.start();
}
public void setVisible(boolean b) {
if(b) {
// デスクトップ中央にJFrameを配置する
Dimension paneSize = this.getSize();
Dimension screenSize = this.getToolkit().getScreenSize();
this.setLocation((screenSize.width - paneSize.width) / 2, (screenSize.height - paneSize.height) / 2);
}
super.setVisible(b);
}
public void addNotify() {
Dimension d = getSize();
super.addNotify();
setSize(getInsets().left + getInsets().right + d.width, getInsets().top + getInsets().bottom + d.height);
Component components[] = getComponents();
for(int i = 0; i < components.length; i++) {
Point p = components[i].getLocation();
p.translate(getInsets().left, getInsets().top);
components[i].setLocation(p);
}
}
/**
* WindowClose 処理
* @param event
*/
public void FrameClosing(WindowEvent event) {
// スレッドを停止する
setVisible(false);
dispose();
}
class SymWindow extends WindowAdapter
{
public void windowClosing(WindowEvent event) {
Object object = event.getSource();
if(object == TouchScreen.this) {
FrameClosing(event);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//
// モード に関するメソッド
//
protected StartModePanel startModePanel;
/*
protected UnregisteredModePanel unregisteredModePanel;
protected BusyModePanel busyModePanel;
*/
/*
* スクリーン遷移モード
*/
public int screenMode = START_MODE; // 現在のスクリーンモードを保持する
static final int START_MODE = 0; // ニュートラル
static final int USER_MODE = 1; // ユーザー認証済み(キー選択)
static final int UNREGISTERED_MODE = 2; // 未登録カードモード
static final int BUSY_MODE = 3; // データ更新処理中モード
static final int KEYTAG_MODE = 4; // キータグ返却モード(AUTO_RETURN)
/*
* 「ニュートラル」モード
* new ImageIcon("lib/card.gif"), "IDカードをかざしてください。"
*
*/
public void printStartMessage() {
this.screenMode = TouchScreen.START_MODE;
// 表示パネルを切り替える
if (this.mainPanel != null) {
this.remove(this.mainPanel);
}
this.mainPanel = this.startModePanel;
this.add(BorderLayout.CENTER, mainPanel);
this.setVisible(true);
this.repaint();
}
@Override
public void run() {
while (this.screenMode == TouchScreen.START_MODE) {
// 表示パネルを切り替える
if (this.mainPanel != null) {
this.remove(this.mainPanel);
this.mainPanel = null;
this.setVisible(true);
//this.repaint();
try {
Thread.sleep(300);
} catch (InterruptedException e) {}
}
else {
this.mainPanel = this.startModePanel;
this.add(BorderLayout.CENTER, mainPanel);
this.setVisible(true);
//this.repaint();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {}
}
}
}
}