2009年5月31日日曜日

Java パスを指定して画像を読み込む

Sample1.jpgをデスクトップから読み込み、Frameに描画します。

画像を読み込むにはAWTのToolkitクラスに用意されているgetImageメソッドを使用します。
Toolkitは AWTの世界と現実のウィンドウシステムとの間の橋渡しをするクラスです。
このクラスは抽象クラスになっていて、まずgetDefaultToolkitメソッドでデフォルトインスタンスを取得します。
package graphicsSample;

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

public class ImageSample extends Frame {

private static final long serialVersionUID = 1L;
//イメージ
Image img = null;  //  @jve:decl-index=0:

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
new ImageSample();
}

/**
* This is the default constructor
*/
public ImageSample() {
initialize();
}

/**
* This method initializes this
* 
* @return void
*/
private void initialize() {
this.setSize(500, 500);
this.setTitle("Frame");

//イメージを読み込みます。
img = Toolkit.getDefaultToolkit().getImage("C:/Users/UserName/Desktop/Sample1.jpg");

this.setVisible(true);

}

@Override
public void paint(Graphics g) {
// TODO 自動生成されたメソッド・スタブ
//super.paint(g);
//イメージを描画します。
g.drawImage(img,50,50,this);
}
}  //  @jve:decl-index=0:visual-constraint="18,7"



Java AWT 図形を描画する

AWTで図形を描画してみます。

AWTのコンポーネントの描画はすべてJavaで行われているわけではなく、WindowsであればWIN32APIを使用しているため、
ButtonクラスのpaintメソッドをオーバーライドしてもButtonのデザインを変更することはできません。
AWTではGUIの表示を変更することができません。
※Swingではすべての描画がJavaで行われいるので、GUIの表示を変更することが可能です。


AWTの描画の仕組みは、コンポーネントで再描画の要求があるとrepaint、Update、Paintの順に描画メソッドが呼び出されていきます。

FrameクラスのpaintメソッドをオーバーライドしてFrameに図形を描画してみます。
paintメソッドの引数Graphicsクラスには下記のような描画メソッドが用意されています。

drawRect(横位置, 縦位置, 横幅, 縦幅)枠線のみの四角を描画します。
fillRect(横位置, 縦位置, 横幅, 縦幅)塗りつぶした資格を描画します。
drawOval(横位置, 縦位置, 横幅, 縦幅)枠線のみの円を描画します。
fillOval(横位置, 縦位置, 横幅, 縦幅)塗りつぶした円を描画します。
drawLine(開始横位置,開始縦位置, 終了横位置, 終了縦位置)直線を描画します。
drawRoundRect(横位置, 縦位置, 横幅, 縦幅, 丸みの横幅, 丸みの縦幅)枠線のみの角が丸い四角を描画します。
fillRoundRect(横位置, 縦位置, 横幅, 縦幅, 丸みの横幅, 丸みの縦幅)塗りつぶした角が丸い四角を描画します。
draw3DRect(横位置, 縦位置, 横幅, 縦幅, boolean)枠線が立体的な四角を描画します。第5引数のboolean型には凸であればtrue。凹であればfalse。
drawArc(横位置, 縦位置, 横幅, 縦幅, 開始角度, 描画角度)円弧を描画します。開始角度、描画角度はは3時の位置を0として、反時計周りに算出した円弧の角度を指定します。
fillArc(横位置, 縦位置, 横幅, 縦幅, 開始角度, 描画角度)扇型を描画します。開始角度、描画角度はは3時の位置を0として、反時計周りに算出した円弧の角度を指定します。
drawPolyLine(int配列1, int配列2, int配列3)開いた多角形の線分を描画します。
drawPolygon(int配列1, int配列2, int配列3)
drawPolygon(Polygon)
閉じた多角形の線分を描画します。
fillPolygon(int配列1, int配列2, int配列3)
fillPolygon(polygon)
閉じた多角形を塗りつぶして描画します。



VisualEditorを利用してFrameを作成します。
ソースコードの「extends Frame」にカーソルを置いた状態で
eclipseメニューの「ソース」より「メソッドのオーバーライド/実装」を選択します。
起動した画面より「Container」の「paint(Graphics)」をチェックONにし「OK」ボタンをクリックします。



ソースコードのPaintメソッドに描画コードを記述します。
package graphicsSample;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Polygon;

public class GraphicsSample01 extends Frame {

private static final long serialVersionUID = 1L;
@Override
public void paint(Graphics g) {
// TODO 自動生成されたメソッド・スタブ
//super.paint(g);

g.setColor(Color.red);
//枠線のみの四角形を描画します。
g.drawRect(50,50,50,50);
//塗りつぶした四角形を描画します。
g.fillRect(120, 50, 50, 50);

g.setColor(Color.blue);
//枠線のみの円を描画します。
g.drawOval(50,120,50,50);
//塗りつぶした円を描画します。
g.fillOval(120, 120, 50, 50);

g.setColor(Color.black);
//直線を描画します。
g.drawLine(50, 190, 150, 190);

g.setColor(Color.orange);
//枠線のみの角の丸い四角を描画します。
g.drawRoundRect(50, 260, 50, 50, 20,20);
//塗りつぶした角の丸い四角を描画します。
g.fillRoundRect(120, 260, 50, 50, 20,20);

g.setColor(Color.lightGray);
//枠線が浮き出した四角を描画します。
g.fill3DRect(50, 330, 50, 50, true);
//枠線がへこんだ四角を描画します。
g.fill3DRect(120, 330, 50, 50, false);

g.setColor(Color.magenta );
//円弧を描画します。
g.drawArc(50, 400, 50, 50, 0, -90);
//扇型を描画します。
g.fillArc(120, 400, 50, 50, 0, -90);

g.setColor(Color.cyan);
//(50,470)、(100,520)、(150,470)、(200,520)の4点を結ぶ折れ線を描画します。
int p = 4;
int[] x = {50,100,150,200};
int[] y = {470,520,470,520};
g.drawPolyline(x, y, p);

//(50,590),(100,640),(150,590),(200,640)の4点を結ぶ多角形を描画します。
Polygon pol1 = new Polygon();
pol1.npoints = 4;
pol1.xpoints = new int[]{50,100,150,200};
pol1.ypoints = new int[]{590,640,590,640};
g.drawPolygon(pol1);

//(50,650),(100,700),(150,650),(200,700)の4点を結ぶ塗りつぶした多角形を描画します。
Polygon pol2 = new Polygon();
pol2.npoints = 4;
pol2.xpoints = new int[]{50,100,150,200};
pol2.ypoints = new int[]{590,640,590,640};
g.fillPolygon(pol2);
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
new GraphicsSample01();
}

/**
* This is the default constructor
*/
public GraphicsSample01() {
super();
initialize();
}

/**
* This method initializes this
* 
* @return void
*/
private void initialize() {
this.setSize(300, 700);
this.setTitle("Frame");

this.setVisible(true);
}

}


2009年5月30日土曜日

Java VisualEditorの利用

VEプロジェクトを作ります。

eclipseの「ファイル」メニュー「新規」より「その他」を選択します。
起動した画面より「Java」の「ビジュアル・クラス」を選択します。



以下のような画面が起動しますので、以下の設定を行います。
名前:クラス名を入力します。
スタイル:ベースとなるクラスを指定します。今回はAWTのフレームを選択します。
作成するメソッド・スタブの選択:
 public static void main(String[] args)をチェックON
 継承された抽象メソッドをチェックON


画面の右端の▽マークでパレットウインドウよりコントロールを選択肢Frameにドラッグします。
コントロールのプロパティは、プロパティウィンドウで設定します。


ボタンをFrameにドラッグします。
ボタンを選択し右クリックメニューの「イベント」の「actionPerformed」クリックすると
ActionListenerが無名クラスを使って組み込まれます。

Java 実行可能Javaアーカイブを作る

eclipseの「ファイル」メニューより「エクスポート」を選択します。
起動したウィンドウから「JARファイル」を選択し「次へ」をクリックします。



起動した画面で「エクスポートするリソースの選択」と「エクスポート先の選択」を行い、後はデフォルトのままにしておきます。



この画面はデフォルトのままにしておきます。



この画面では「アプリケーションのエントリー・ポイントのクラスを指定」で
参照ボタンをクリックして、選択可能なクラスの一覧が表示されるので、メインクラスを選択します。



「エクスポート先の選択」で指定したファイル名.jarファイルが作成されます。

2009年5月29日金曜日

Java VisualEditor1.4のインストール

GUIのデザインをビジュアルエディタを使用して作成できる Visual Editor をインストールします。

eclipseを起動し、ヘルプの「ソフトウェアの更新」をクリックします。
「ソフトウェア更新およびアドオン」画面が起動しますので
「サイトの追加」ボタンをクリックし「http://update.soyatec.org/Ganymede/ve/1.4」を追加します。


追加したサイトのチェックボックスをONにし「インストールボタンをクリック」します。

画面に従ってインストールが完了すると再起動を勧めるメッセージが表示されますので、
eclipseを再起動します。

ヘルプの「Eclipseプラットフォームについて」をクリックし、開いた画面の「プラグインの詳細」ボタンをクリックします。


プラグイン名に「Visual Editor」が表示されていれば、インストール完了です。

Java AWT Windowイベント

WindowStateListener
windowStateChangedウインドウの状態が変更された際に発生する


WindowListener
windowActivatedウィンドウがアクティブ化されると呼び出されます。
windowClosedウィンドウがクローズされると呼び出されます。
windowClosingウィンドウがクローズ処理中である時に呼び出されます。
windowDeactivatedウィンドウが非アクティブ化されると呼び出されます。
windowDeiconifiedウィンドウが最小化された状態から通常の状態に変更されたときに呼び出されます。
windowIconifiedウィンドウが通常の状態から最小化された状態に変更されたときに呼び出されます。
windowOpenedウィンドウがオープンされると呼び出されます。


WindowAdapter : WindowStateListener、 WindowListenerを実装したクラス


WidowAdapterクラスでwindowStateChangedとwindowClosingを処理するサンプルです。
同じWindowAdapterクラスでも
windowStateChangedを処理する場合は、FrameクラスのaddWindowStateListenerで追加し
windowClosingを処理する場合は、FrameクラスのaddWindowListenerで追加します。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class WindowEventSample {

public static void main(String args[]){
new WindowEventSample();
}

Frame frm;
Label lbl;
public WindowEventSample(){
frm = new Frame("WindowEventSample");
frm.setSize(300,300);
frm.addWindowListener(new MyWindowAdapter());
frm.addWindowStateListener(new MyWindowAdapter());

lbl = new Label();
frm.add(lbl);

frm.setVisible(true);

}

private class MyWindowAdapter extends WindowAdapter{

public void windowStateChanged(WindowEvent arg0) {
lbl.setText("windowStateChanged"); 
}

public void windowClosing(WindowEvent e) {
System.exit(0);
}

}

}





フォームを最大化すると「windowStateChanged」が表示されます。

Java AWT コンテナイベント

ContainerListener
componentAddedコンポーネントが追加された際に発生する
componentRemovedコンポーネントが削除された際に発生する


ContainerAdapterクラス:ContainerListenerインターフェースを実装済みのクラスです。

以下のコードはcomponentAddedイベントとcomponentRemovedイベントの使用例です。
package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class ContainerEventSample {
/*
* エントリーポイント
*/
public static void main(String args[]){
new ContainerEventSample();
}

Frame frm;
Button btn1;
TextField txt1;
Label lbl1;

/*
* コンストラクタ
*/
public ContainerEventSample(){
frm =new Frame("ContainerEventSample");
frm.setSize(300,300);
frm.setLayout(new GridLayout(3,1));
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
frm.addContainerListener(new MyContainerAdapter());

lbl1 = new Label();
frm.add(lbl1);

btn1= new Button("add");
btn1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if (txt1 == null ){
txt1 = new TextField();
txt1.setBackground(Color.blue);
}
if (txt1.getParent() == null){
frm.add(txt1);
btn1.setLabel("remove");
}else {
frm.remove(txt1);
btn1.setLabel("add");
}
frm.validate();
}
});
frm.add(btn1);

frm.setVisible(true);
}


private class MyContainerAdapter extends ContainerAdapter {

public void componentAdded(ContainerEvent e) {
lbl1.setText("componentAdded");
}


public void componentRemoved(ContainerEvent e) {
lbl1.setText("componentRemoved");
}


}
}




Java AWT コンポーネントイベント

ComponentListener
componentHiddeenコンポーネントが非表示になった時に発生する
componentShownコンポーネントが表示されたときに発生する
componentMovedコンポーネントが移動したときに発生する
componentResizedコンポーネントがリサイズしたときに発生する


ComponentAdapterクラス:ComponentListenerインターフェースを実装済みのクラスです。

以下のコードはcomponentHiddeenイベントとcomponentShownイベントの使用例です。
public class ComponentEventSample {
/*
* アプリケーションエントリーポイント
*/
public static void main(String args[]){ 
new ComponentEventSample();
}

Frame frm;
TextField txt1;
Button btn1;
Label lbl1;
/*
* コンストラクタ
*/
public ComponentEventSample(){
this.frm = new Frame("ComponentEventSample");
frm.setSize(300,400);
frm.setLayout(new GridLayout(3,1));
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});


this.txt1 = new TextField();
txt1.setSize(10,20);
txt1.setBackground(Color.blue);
txt1.addComponentListener(new MyComponetAdapter());
frm.add(txt1);

this.btn1 = new Button();
btn1.setLabel("Visible");
btn1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
txt1.setVisible(!txt1.isShowing());
}
});
frm.add(btn1);

this.lbl1 = new Label();
frm.add(lbl1);

frm.setVisible(true);
}

private class  MyComponetAdapter extends ComponentAdapter{
public void componentHidden(ComponentEvent ev){
lbl1.setText("componentHidden: txt1 is Hidden" );
}

public void componentShown(ComponentEvent ev){
lbl1.setText("componentHidden: txt1 is Shown" );
}

}

}



2009年5月23日土曜日

Java AWT Foucusに関するイベント

FocusListener
focusGainedフォーカスを受けたときに発生する
focusLostフォーカス失った時に発生する


FocusAdapterクラスはFocusListenerインターフェースを実装済みのクラスです。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class FocusEventSample {
/*
* エントリポイント
*/
public static void main(String args[]){
new FocusEventSample();
}
Frame frm;
TextField txt1;
TextField txt2;
Label lbl1;
Label lbl2;
/*
* コンストラクタ
*/
public FocusEventSample(){
this.frm = new Frame("FocusEventSample");
frm.setSize(300, 300);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
frm.setLayout(new GridLayout(4,1));

this.txt1 = new TextField();
txt1.addFocusListener(new MyFocusAdapter());
frm.add(txt1);

this.txt2 = new TextField();
txt2.addFocusListener(new MyFocusAdapter());
frm.add(txt2);

this.lbl1 = new Label();
frm.add(lbl1);

this.lbl2 = new Label();
frm.add(lbl2);

frm.setVisible(true);
}

/*
* FocusAdapter
*/
private class MyFocusAdapter implements FocusListener{

public void focusGained(FocusEvent e) {
//イベントが発生したコンポーネント
TextField txt1 = (TextField)e.getSource();
//移動元のコンポーネント
TextField txt2 = (TextField)e.getOppositeComponent();

String s1 = "";
String s2 = "";
if (txt1 != null){
s1 = txt1.getName();
}
if (txt2 != null){
s2 = txt2.getName();
}
lbl1.setText("focusGained: " + s1 + " (移動元:" + s1 + ")");
}

public void focusLost(FocusEvent e) {
//イベントが発生したコンポーネント
TextField txt1 = (TextField)e.getSource();
//移動元のコンポーネント
TextField txt2 = (TextField)e.getOppositeComponent();

String s1 = "";
String s2 = "";
if (txt1 != null){
s1 = txt1.getName();
}
if (txt2 != null){
s2 = txt2.getName();
}
lbl2.setText("focusLost: " + s1 + " (移動先:" + s2 + ")");
}

}
}

Java AWT キー操作に関するイベント

KeyListener
keyPressedキーが打たれた瞬間に発生するイベント
keyReleasedキーが離された瞬間に発生するイベント
keyTypedキーが入力されたことを示すイベント

KeyAdapterクラスはKeyListenerインターフェースを実装済みのクラスです。


keyPressedとkeyTypedの違い
・大文字のAを入力する際、Shiftキー + aキー を押下しますが、
まずShiftキー押下でkeyPressが発生し、aキー押下でkeyPressが続けて発生し、その後keyTypedが発生します。

・特殊キー(Shift、Alt、Ctrl、矢印など)はkeyPressedで補足できるが、keyTypedでは補足できません。

・全角「か」を入力する際、kキー + aキーを押下しますが、keyPressは発生しませんが、keyTypedは発生します。

つまり特殊キーを補足して処理を行いたい場合はkeyPressを使用し、文字入力にた対して処理を行いたい場合はkeyTypedを使用します。
JavaではBackspace、Del、Enter、Esc、Spaceキーは特殊キーではなくkeyTypedが発生します。



package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class KeyEventSample01 {
//エントリーポイント
public static void main(String args[]){
new KeyEventSample01();
}

Frame frm;
TextField txt1;
TextField txt2;
Label lbl1;
Label lbl2;

//コンストラクタ
public KeyEventSample01(){
//フレームを作成します。
frm = new Frame("KeyEventSample01");
frm.setSize(400, 300);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//
txt1 = new TextField();
txt1.addKeyListener(new KeyAdapter_txt1());
txt2 = new TextField();
txt2.addKeyListener(new KeyAdapter_txt2());
lbl1 = new Label();
lbl2 = new Label();
//
frm.setLayout(new GridLayout(4,1));
frm.add(txt1);
frm.add(txt2);
frm.add(lbl1);
frm.add(lbl2);
//フレームを表示します。
frm.setVisible(true);
}


private class KeyAdapter_txt1 extends KeyAdapter{

public void keyPressed(KeyEvent ev){
lbl1.setText("keyPressed:KeyChar[" + ev.getKeyChar() + "] KeyCode[" + ev.getKeyCode() + "]が押されました。" );   
}
}

private class KeyAdapter_txt2 extends KeyAdapter{

public void keyTyped(KeyEvent ev){
lbl2.setText("keyTyped:KeyChar[" + ev.getKeyChar() + "] KeyCode[" + ev.getKeyCode() + "]が押されました。" );   
}
}
}

2009年5月12日火曜日

.NET バイト配列の一部を別のバイト配列にコピーするには

バイト配列の一部を別のバイト配列にコピーするにはBuffer.BlockCopyメソッドを使用します。

'1200バイト配列を120バイトづつ配列にセットしていきます。
Dim data(1200) As Byte = '略
Dim line As New List(Of Byte())

Dim idx As Integer
Do While idx < data.Length
    Dim b(120) As Byte
    Buffer.BlockCopy(data, idx, b, 0, 120)
    line.Add(b)
    idx += 120
Loop

For Each item() As Byte In line
Console.WriteLine(System.Text.Encoding.GetEncoding("Shift_Jis").GetString(item))
Next

2009年5月6日水曜日

Java AWT マウス操作に関するイベント

MouseListener
mouseClickedマウスボタンをクリックしたときに発生する
mouseEnteredマウスボタンが領域内に入った時に発生する
mousePressedマウスボタンが領域外に出たときに発生する
mouseReleasedマウスボタンが放されたときに発生する


MouseMotionListener
mouseDraggedマウスがドラッグされている間、常に発生し続ける
mouseMovedマウスが動かされている間、常に発生する


MouseWheelListener
mouseWheelMoveマウスが回転される間、常に発生する


package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class MouseEventSample01 {
/*
* エントリーポイント
*/
public static void main(String args[]){
new MouseEventSample01();
}

Frame frm;
Label lbl1;
/*
* コンストラクタ
*/
public MouseEventSample01(){
//フレームを作成します。
frm = new Frame("MouseEventSample01");
frm.setSize(300,300);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//フレームにイベントリスナーを追加します。
frm.addMouseListener(new MouseAdapter_frm());
frm.addMouseMotionListener(new MouseMotionAdapter_frm());
frm.addMouseWheelListener(new MouseWheelAdapter_frm());
//ラベルを作成します。
lbl1 = new Label();
//フレームにコンポーネントを追加します。
frm.add(lbl1,BorderLayout.NORTH);
//フレームを表示します。
frm.setVisible(true);
}

/*
* フレームのMouseListener
*/
private class MouseAdapter_frm implements MouseListener{

@Override
public void mouseClicked(MouseEvent arg0) {
//マウスボタンをクリックしたときに発生する
if (arg0.getClickCount() == 1) {
lbl1.setText("mouseClick:SingleClick X=" + arg0.getX() + " Y="+ arg0.getY());
}else if (arg0.getClickCount() == 2) {
lbl1.setText("mouseClick:DoubleClick X=" + arg0.getX() + " Y="+ arg0.getY());
}   
}

@Override
public void mouseEntered(MouseEvent arg0) {
// マウスボタンが領域内に入った時に発生する
}

@Override
public void mouseExited(MouseEvent arg0) {
// マウスボタンが領域外に出たときに発生する
}

@Override
public void mousePressed(MouseEvent arg0) {
// マウスボタンが押されたときに発生する
}

@Override
public void mouseReleased(MouseEvent arg0) {
// マウスボタンが放されたときに発生する
}
}

/*
* フレームのMouseMotionListener
*/
private class MouseMotionAdapter_frm implements MouseMotionListener{

@Override
public void mouseDragged(MouseEvent arg0) {
// マウスがドラッグされている間、常に発生し続ける
}

@Override
public void mouseMoved(MouseEvent arg0) {
// マウスが動かされている間、常に発生する
lbl1.setText("mouseMoved:X=" + arg0.getX() + " Y="+ arg0.getY());
}
}

/*
* フレームのMouseWheelAdapter
*/
private class MouseWheelAdapter_frm implements MouseWheelListener{

@Override
public void mouseWheelMoved(MouseWheelEvent arg0) {
// マウスが回転される間、常に発生する
lbl1.setText("mouseWheelMoved:ホイール数=" + arg0.getWheelRotation());
}

}
}


MouseAdapterクラスはMouseListenerインターフェースを実装済みのクラスです。
MouseMotionAdapterクラスはMouseMotionListenerインターフェースを実装済みのクラスです。
各Adapterクラスはあらかじめ各Listenerを実装し、すべてのメソッドをオーバライド済みにしたクラスです。
必要なメソッドのみオーバーライドして使用できます。
※MouseWheelListenerインターフェースはJava2 1.4から導入されたものでを実装済みのクラスはありません。
package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class MouseEventSample02 {

/*
* エントリーポイント
*/
public static void main(String args[]){
new MouseEventSample02();
}

Frame frm;
Label lbl1;
/*
* コンストラクタ
*/
public MouseEventSample02(){
//フレーム作成します。
frm = new Frame("MouseEventSample02");
frm.setSize(300,300);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//フレームにイベントリスナーを追加します。
frm.addMouseListener(new MouseAdapter_frm());
frm.addMouseMotionListener(new MouseMotionAdapter_frm());  
//ラベルを作成します。
lbl1 = new Label();
//フレームにコンポーネントを追加します。
frm.add(lbl1,BorderLayout.NORTH);
//フレームを表示します。
frm.setVisible(true);
}

/*
* フレームのMouseAdapterリスナー
*/
private class MouseAdapter_frm extends MouseAdapter{
public void mouseClicked(MouseEvent ev) {
//マウスボタンをクリックしたときに発生する
if (ev.getClickCount() == 1) {
lbl1.setText("mouseClick:SingleClick X=" + ev.getX() + " Y="+ ev.getY());
}else if (ev.getClickCount() == 2) {
lbl1.setText("mouseClick:DoubleClick X=" + ev.getX() + " Y="+ ev.getY());
}      
}
}
/*
* フレームのMouseMotionリスナー
*/
private class MouseMotionAdapter_frm extends MouseMotionAdapter{
public void mouseMoved(MouseEvent ev) {
// マウスが動かされている間、常に発生する
lbl1.setText("mouseMoved:X=" + ev.getX() + " Y="+ ev.getY());   
}
}
}

2009年5月5日火曜日

Java AWT Listコンポーネント

一覧リストから項目を選択するためのコンポーネントです。
項目選択時はItemListenerクラスのitemStateChangedメソッドが発生します。
項目ダブルクリック時はActionListenerクラスのActionEventが発生します。
package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class ListSample {
/*
* エントリーポイント
*/
public static void main(String args[]){
new ListSample();
}

Frame frm;
List lst1;
Label lbl1;

/*
* コンストラクタ
*/
public ListSample(){
//フレームを作成します。
frm = new Frame("ListSample");
frm.setSize(300,300);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//リストを作成します。
lst1 = new List();
//複数選択可能に設定します。
lst1.setMultipleMode(true);
//リストに項目を追加します。
lst1.add("Brue");
lst1.add("Red");
lst1.add("Green");
lst1.add("Black");
lst1.add("White");
lst1.addItemListener(new lst1ItemAdapter());
//ラベルを作成します。
lbl1 = new Label();
//フレームにレイアウトを設定します。
frm.setLayout(new GridLayout(2,1));
//フレームにコンポーネントを追加します。
frm.add(lbl1);
frm.add(lst1);
//フレームを表示します。
frm.setVisible(true);
}

/*
* lst1のItemListener
*/
private class lst1ItemAdapter implements ItemListener{

@Override
public void itemStateChanged(ItemEvent e) {
String selectedStr = "";
for (int idx=0; idx < lst1.getItemCount(); idx++){
if (lst1.isIndexSelected(idx)){
selectedStr += String.valueOf(idx) + ":" + lst1.getItem(idx) + " "; 
}
}
lbl1.setText(selectedStr);
}

}
}

Java AWT Choiceコンポーネント(コンボボックス)

項目の選択時、ItemListenerクラスのitemStateChangedメソッドが発生します。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;


public class ChoiceSample {
/*
* エントリーポイント
*/
public static void main(String args[]){
new ChoiceSample();
}

Frame frm;
Choice chc1;
Label lbl1;

/*
* コンストラクタ
*/
public ChoiceSample(){
//フレームを作成します。
frm = new Frame("ChoiceSample");
frm.setSize(300,300);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//Choiceを作成します。
chc1 = new Choice();
chc1.add("Brue");
chc1.add("Red");
chc1.add("Green");
chc1.add("Black");
chc1.add("White");
chc1.addItemListener(new chs1ItemAdapter());
//ラベルを作成します。
lbl1 = new Label();
//フレームのレイアウトを設定します。
frm.setLayout(new GridLayout(2,1));
//フレームにコンポーネントを追加します。
frm.add(lbl1);
frm.add(chc1);
//フレームを表示します。
frm.setVisible(true);

}

/*
* chc1のItemListener
*/
private class chs1ItemAdapter implements ItemListener{
@Override
public void itemStateChanged(ItemEvent e) {
//項目選択時に発生します。
int selectedIdx = chc1.getSelectedIndex();
String selectedStr = chc1.getSelectedItem();
lbl1.setText(selectedIdx + ":" + selectedStr);
}
}
}


Java AWT TextAreaコンポーネント

複数行入力用のコンポーネントです。
Enterキーで改行するため、ActionListener.actionPerformedメソッドは発生しません。
指定した行数および列数は、表示の際の最適サイズなどの計算にのみ使用しており、入力制限を行うものではありません。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class TextAreaSample {

/*
* エントリーポイント
*/
public static void main(String args[]){
new TextAreaSample();
}

Frame frm;
TextArea ta1;
/*
* コンストラクタ
*/
public TextAreaSample(){
//Fフレームを作成します。
frm = new Frame("TextAreaSample");
frm.setSize(300,300);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//テキストエリアコンポーネントを作成します。
ta1 = new TextArea(10,20);
//フレームにコンポーネントを追加します。
frm.add(ta1,BorderLayout.NORTH);
//フレームを表示します。
frm.setVisible(true);
}

}

2009年5月4日月曜日

Java AWT TextFieldコンポーネント

1行だけのテキストを扱うためのコンポーネントです。

Enterキーを押すとActionListenerクラスのActionEventメソッドが呼ばれます。
キーイベントは、KeyListenerクラスのkeyPressedメソッド、keyReleasedメソッド、keyTypedメソッドが呼ばれます。
テキストの値が変更されるとTextListenerクラスのtextValueChangedメソッドが呼ばれます。


package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class TextFieldSample {

/*
* エントリーポイント
*/
public static void main(String args[]){
new TextFieldSample();
}

TextField txt1;
Label lbl1;
Label lbl2;
Label lbl3;
Panel p1;

/*
* コンストラクタ
*/
public TextFieldSample(){
//Frameを作成します。
Frame frm = new Frame("TextFieldSample");
frm.setSize(300,300);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//TextFieldを作成しイベントリスナーを追加します。
txt1 = new TextField();
txt1.addActionListener(new txt1ActionAdapter());
txt1.addKeyListener(new txt1KeyAdapter());
txt1.addTextListener(new txt1TextAdapter());
//ラベルを作成します。
lbl1 = new Label();
lbl2 = new Label();
lbl3 = new Label();
//パネルを作成し、コンポーネントを追加します。
p1 = new Panel();
p1.setLayout(new GridLayout(3,1));
p1.add(lbl1);
p1.add(lbl2);
p1.add(lbl3);
//コンポーネントを追加します。
frm.add(txt1,BorderLayout.NORTH);
frm.add(p1,BorderLayout.CENTER);
//Frameを表示します。
frm.setVisible(true);
}

/*
* txt1のActionListener
*/
private class txt1ActionAdapter implements ActionListener{
public void actionPerformed(ActionEvent ev) {
//Enterキーが押された時に呼ばれます。
lbl2.setText("actionPerformed:" + txt1.getText());
}
}
/*
* txt1のKeyListener
*/
private class txt1KeyAdapter implements KeyListener{
@Override
public void keyPressed(KeyEvent ev) {
//キーが押された時に呼ばれます。
lbl1.setText("keyPressed:" + String.valueOf(ev.getKeyChar()));
}

@Override
public void keyReleased(KeyEvent ev) {
//キーが離された時に呼ばれます。
}

@Override
public void keyTyped(KeyEvent ev) {
//キーがタイプされた時に呼ばれます。
}

}
/*
* txt1のTextListener
*/
private class txt1TextAdapter implements TextListener{

@Override
public void textValueChanged(TextEvent arg0) {
//テキストの値が変更した時に呼ばれます。
lbl3.setText("ValueChanged:"+ txt1.getText());
}

}

}


Java AWT CheckboxGroupコンポーネント(ラジオボタン)

AWTにはラジオボタンのためのクラスはありません。
CheckboxクラスをCheckboxGroupクラスでグループ化すると、常に一つだけが選択された状態となるラジオボタンになります。

CheckboxGroup.getSelectedCheckboxメソッドでグループ内でチェックONのCheckboxを取得します。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class CheckboxGroupSample {
/*
* エントリポイント
*/
public static void main(String args[]){
new CheckboxGroupSample();
}

Frame frm;

Panel pnl1;
CheckboxGroup chkGroup;
Checkbox chk1;
Checkbox chk2;
Checkbox chk3;

Panel pnl2;
Label lbl1;

/*
* コンストラクタ
*/
public CheckboxGroupSample(){
//フレームを作成します。
frm = new Frame("CheckboxGroupSample");
//フレームのサイズを指定します。
frm.setSize(300,300);
//無名クラスを使用してフレームを閉じます。
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//チェックボックスグループを作成します。
chkGroup = new CheckboxGroup();
//チェックボックスを作成します。
chk1 = new Checkbox("Blue");
chk1.setCheckboxGroup(chkGroup);
chk1.setState(false);
chk2 = new Checkbox("Red",chkGroup,false);
chk3 = new Checkbox("Green",chkGroup,false);
//チェックボックスにItemListenerを追加します。
chk1.addItemListener(new chkItemAdapter());
chk2.addItemListener(new chkItemAdapter());
chk3.addItemListener(new chkItemAdapter());
//パネルを作成します。
pnl1 = new Panel();
pnl1.setLayout(new GridLayout(1,3));
//パネルにコンポーネントを追加します。
pnl1.add(chk1);
pnl1.add(chk2);
pnl1.add(chk3);
//ラベルを作成します。
lbl1 = new Label();
//フレームにコンポーネントを追加します。
frm.setLayout(new GridLayout(2,1));
frm.add(pnl1);
frm.add(lbl1);
//フレームを表示します。
frm.setVisible(true);
}

/*
* chkItemListener
*/
private class chkItemAdapter implements ItemListener{
@Override
public void itemStateChanged(ItemEvent arg0) {
Checkbox chkSelected = chkGroup.getSelectedCheckbox();
if (chkSelected != null ){
lbl1.setText("Selected:" + chkSelected.getLabel());
} 
}
}
}



Java AWT CheckBoxコンポーネント

チェックボックスの選択変更イベントはItemListenerクラスのItemStateChangedメソッドで処理します。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class CheckBoxSample {
/*
* エントリポイント
*/
public static void main(String args[]){
new CheckBoxSample();
}

Checkbox chk1;
Checkbox chk2;
Checkbox chk3;
Label lbl1;
Label lbl2;
Label lbl3;
Panel pnl1;
Panel pnl2;

/*
* コンストラクタ
*/
public CheckBoxSample(){
//フレームを作成します。
Frame frm = new Frame("CheckBoxSample");
//フレームサイズを指定します。
frm.setSize(300,300);
//無名クラスを使用してフレームを閉じます。
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//チェックボックスを作成します。
chk1 = new Checkbox("Blue");
chk2 = new Checkbox("Red");
chk3 = new Checkbox("Green");
//チェックボックスにItemListenerを追加します。
chk1.addItemListener(new chk1ItemAdapter());
chk2.addItemListener(new chk2ItemAdapter());
chk3.addItemListener(new chk3ItemAdapter());
//パネルを作成します。
pnl1 = new Panel();
pnl1.setLayout(new GridLayout(1,3));
//パネルにコンポーネントを追加します。
pnl1.add(chk1);
pnl1.add(chk2);
pnl1.add(chk3);
//ラベルを作成します。
lbl1 = new Label();
lbl2 = new Label();
lbl3 = new Label();
//パネルを作成します。
pnl2 = new Panel();
pnl2.setLayout(new GridLayout(1,3));
//パネルにコンポーネントを追加します。
pnl2.add(lbl1);
pnl2.add(lbl2);
pnl2.add(lbl3);
//
frm.setLayout(new GridLayout(2,1));
frm.add(pnl1);
frm.add(pnl2);
//
frm.setVisible(true);
}
/*
* chk1ItemListener
*/
private class chk1ItemAdapter implements ItemListener{
@Override
public void itemStateChanged(ItemEvent arg0) {
if (chk1.getState()==true){
lbl1.setText(chk1.getLabel());
}else{
lbl1.setText("");
}   
}
}
/*
* chk2ItemListener
*/
private class chk2ItemAdapter implements ItemListener{
@Override
public void itemStateChanged(ItemEvent arg0) {
if (chk2.getState()==true){
lbl2.setText(chk2.getLabel());
}else{
lbl2.setText("");
}   
}
}
/*
* chk3ItemListener
*/
private class chk3ItemAdapter implements ItemListener{
@Override
public void itemStateChanged(ItemEvent arg0) {
if (chk3.getState()==true){
lbl3.setText(chk3.getLabel());
}else{
lbl3.setText("");
}   
}
}
}


Java AWT レイアウトマネージャを使用しない

レイアウトマネージャを使用しない場合はsetLayoutメソッドにnullを指定します。
コントロールの位置や大きさはsetBoundsメソッドで指定します。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class NoLayoutManagerSample {
/*
* エントリポイント
*/
public static void main(String args[]){
new NoLayoutManagerSample();
}

/*
* コンストラクタ
*/
public NoLayoutManagerSample(){
//フレームを作成します。
Frame frm = new Frame("NoLayoutManagerSample");
//フレームサイズを指定します。
frm.setSize(300,300);
//無名クラスを使用してフレームを閉じます。
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//レイアウトを設定します。
frm.setLayout(null);
//位置と大きさを指定してボタンを配置します。
for (int idx=0; idx<5; idx++){
Button btn = new Button("Button" + Integer.toString(idx));
btn.setBounds(new Rectangle(idx*25+50,idx*25+50,50,20));
frm.add(btn);
}
//フレームを表示します。
frm.setVisible(true);

}
}

Java AWT レイアウトマネージャ CardLayout

CardLayoutは組み込んだコントロールの中から1つだけを表示するレイアウトマネージャです。
カードを切り替えるように、一つのカードだけを画面に表示し、前後のカードに移動しながら表示を切り替えていきます。
カードを入れ替えるには next()、previous()、first()、last()、show() などのメソッドを用います。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class CardLayoutSample {
/*
* エントリポイント
*/
public static void main(String args[]){
new CardLayoutSample();
}

Frame frm;
Panel pnlMove;
Panel pnlCards;
CardLayout cl;

/*
* コンストラクタ
*/
public CardLayoutSample(){
//フレームを作成します。
frm = new Frame("CardLayoutSample");
//フレームサイズを指定します。
frm.setSize(300,300);  
//無名クラスを使用してフレームを閉じます。
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//***移動ボタン用パネルを作成します***//  
pnlMove = new Panel();  
pnlMove.setLayout(new FlowLayout());  
//--ボタンFirst  
Button btn1 = new Button("First");   
pnlMove.add(btn1);  
btn1.addActionListener(new moveBtnActionAdapter());  
btn1.setActionCommand("First");  
//--ボタンPrevious  
Button btn2 = new Button("Previous");   
pnlMove.add(btn2);  
btn2.addActionListener(new moveBtnActionAdapter());  
btn2.setActionCommand("Previous");  
//--ボタンNext  
Button btn3 = new Button("Next");    
pnlMove.add(btn3);  
btn3.addActionListener(new moveBtnActionAdapter());  
btn3.setActionCommand("Next");  
//--ボタンLast  
Button btn4 = new Button("Last");    
pnlMove.add(btn4);  
btn4.addActionListener(new moveBtnActionAdapter());  
btn4.setActionCommand("Last");  
//パネルをFrameに追加します。 
frm.add(pnlMove,BorderLayout.NORTH );  

//***カードパネルを作成します***//  
pnlCards = new Panel();  
this.cl = new CardLayout();  
pnlCards.setLayout(cl);  
//--カード1  
Panel pnlCard1 = new Panel();  
pnlCard1.add(new Label("Card1"));  
pnlCards.add(pnlCard1,"Card1");  
//--カード2  
Panel pnlCard2 = new Panel();  
pnlCard2.add(new Label("Card2"));  
pnlCards.add(pnlCard2,"Card2");  
//--カード3  
Panel pnlCard3 = new Panel();  
pnlCard3.add(new Label("Card3"));  
pnlCards.add(pnlCard3,"Card3");  
//--カード4  
Panel pnlCard4 = new Panel();  
pnlCard4.add(new Label("Card4"));  
pnlCards.add(pnlCard4,"Card4");  
//フレームにパネルを追加します。
frm.add(pnlCards,BorderLayout.CENTER);  
//pnlCardsの「Card2」を表示します。  
cl.show(pnlCards, "Card2");  

//ウインドウを表示します。
frm.setVisible(true); 
}

/*
* 移動ボタンActionListener
*/
public class moveBtnActionAdapter implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
String cmd = arg0.getActionCommand();
if (cmd.equals("First")){
cl.first(frm);
}else if (cmd.equals("Previous")){
cl.previous(frm);
}else if (cmd.equals("Next")){
cl.next(frm);
}else if (cmd.equals("Last")){
cl.last(frm);
}

}

}
}


2009年5月3日日曜日

Java AWT レイアウトマネージャ GridBagLayout

GridBagLayoutはコンテナの配置に関する情報を管理するGridBagConstraintsクラスのインスタンスを使ってコントロールを配置していきます。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class GridBagLayoutSample extends Frame{

/**
* エントリポイント
*/
public static void main(String args[]){
new GridBagLayoutSample();
}

/**
* 
*/
private static final long serialVersionUID = 1L;

/**
* コンストラクタ
*/
public GridBagLayoutSample(){  
//フレームタイトルを指定します。
this.setTitle("GridBagLayoutSample");
//フレームサイズを指定します。 
this.setSize(300,300);  
//無名クラスでウインドウを閉じる  
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
} 
});  
//GridBagLayoutオブジェクトを作成する  
GridBagLayout gbl = new GridBagLayout();  
//レイアウトをGridBagLayoutに設定します  
this.setLayout(gbl);  
//GridBagConstraintsオブジェクトを作成する  
GridBagConstraints gbc = new GridBagConstraints();  
//Button1  
Button btn1 = new Button("Button1");  
gbc.fill = GridBagConstraints.BOTH;  
gbc.gridx = 0;  
gbc.gridy = 0;  
gbc.gridwidth = 1;  
gbc.gridheight = 1;  
gbl.setConstraints(btn1, gbc);  
this.add(btn1);  
//Button2  
Button btn2 = new Button("Button2");  
gbc.fill = GridBagConstraints.BOTH;  
gbc.gridx = 0;  
gbc.gridy = 1;  
gbc.gridwidth = 1;  
gbc.gridheight = 1;  
gbl.setConstraints(btn2, gbc);  
this.add(btn2);  
//Button3  
Button btn3 = new Button("Button3");  
gbc.fill = GridBagConstraints.BOTH;  
gbc.gridx = 0;  
gbc.gridy = 2;  
gbc.gridwidth = 1;  
gbc.gridheight = 1;  
gbl.setConstraints(btn3, gbc);  
this.add(btn3);  
//Button4  
Button btn4 = new Button("Button4");  
gbc.fill = GridBagConstraints.BOTH;  
gbc.gridx = 1;  
gbc.gridy = 0;  
gbc.gridwidth = 1;  
gbc.gridheight = 3;  
gbl.setConstraints(btn4, gbc);  
this.add(btn4);  

//ウインドウを表示する  
this.setVisible(true);   
}  

} 

Java AWT レイアウトマネージャ GridLayout

GridLayout は、コンテナを縦横に分割し左上から横方向に順番にコントロールを組み込んでいきます。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class GridLayoutSample {

/*
* エントリーポイント
*/
public static void main(String args[]){
new GridLayoutSample();
}

/*
* コンストラクタ
*/
public GridLayoutSample(){
//フレームを作成します。
Frame frm = new Frame("GridLayoutSample");
//フレームサイズを指定します。  
frm.setSize(300,300);  
//無名クラスを使用してFrameを閉じます。
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//レイアウトを設定します。(3行4列)
frm.setLayout(new GridLayout(3,4));
//ボタンを追加します。
for (int idx = 0; idx < 10; idx++){  
frm.add(new Button("Button" + Integer.toString(idx)));  
}
//フレームを表示します。
frm.setVisible(true);   
}
}

Java AWT レイアウトマネージャ FlowLayout

FlowLayout は、コントロールを追加した順番に横一列に並べて配置します。1列で配置しきれない場合は折り返して配置されます。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class FlowLayoutSample {
/*
* エントリポイント
*/
public static void main(String args[]){
new FlowLayoutSample();
}

/*
* コンストラクタ
*/
public FlowLayoutSample(){
//フレームを作成します。
Frame frm = new Frame("FlowLayoutSample");
//フレームサイズを指定します。
frm.setSize(300,300);
//無名クラスを使用してFrameを閉じます。
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//レイアウトを設定します。
frm.setLayout(new FlowLayout());
//フレームにボタンを追加します。
for(int idx=0; idx<10; idx++){
frm.add(new Button("Button" + Integer.toString(idx)));
}
//フレームを表示します。
frm.setVisible(true);
}
}

Java AWT レイアウトマネージャ BorderLayout

BorderLayout は、画面を上下左右中の 5つのブロックに分け、それぞれに部品を配置します。5つのブロックはそれぞれ、東西南北中央(East, West, South, North, Center)で示されます。

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class BorderLayoutSample {
/*
* エントリポイント
*/
public static void main(String args[]){
new BorderLayoutSample();
}

/*
* コンストラクタ
*/
public BorderLayoutSample(){
//フレームを作成します。
Frame frm = new Frame();
//フレームタイトルを指定します。
frm.setTitle("BorderLayoutSample");
//フレームサイズを指定します。
frm.setSize(300,300);
//無名クラスを使用してFrameを閉じます。
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//BorderLayoutを使用してボタンを配置します。 
frm.add(new Button("NORTH"),BorderLayout.NORTH);
frm.add(new Button("WEST"),BorderLayout.WEST);
frm.add(new Button("SOUTH"),BorderLayout.SOUTH);
frm.add(new Button("EAST"),BorderLayout.EAST);
frm.add(new Button("CENTER"),BorderLayout.CENTER);
//フレームを表示します。
frm.setVisible(true);  
}
}


Java AWT Buttonコンポーネント

Buttonが押された時のイベントを処理するにはActionListenerを使用します。
package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class ButtonSample01 {

/*
* エントリポイント
*/
public static void main(String args[]){
new ButtonSample01();
}

Button btn1;

/*
* コンストラクタ
*/
public ButtonSample01(){
//フレームを作成します。
Frame frm = new Frame();
//フレームタイトルを指定します。
frm.setTitle("ButtonSample01");
//フレームサイズを指定します。
frm.setSize(300,300);
//無名クラスを使用してFrameを閉じます。
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//ボタンコンポーネントを作成します。
btn1 = new Button("Button1");
//ボタンのActionListenerを追加します。
btn1.addActionListener(new btn1ActionAdapter());
//フレームにボタンを追加します。
frm.add(btn1);
//フレームを表示します。
frm.setVisible(true);  
}

/*
* btn1のActionListener
*/
private class btn1ActionAdapter implements ActionListener{
@Override
public void actionPerformed(ActionEvent arg0) {
btn1.setLabel("Clicked");
}
}
}




無名クラスを利用して下記のように書き換えることもできます。
package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class ButtonSample02 {
/*
* エントリポイント
*/
public static void main(String args[]){
new ButtonSample02();
}

Button btn1;

/*
* コンストラクタ
*/
public ButtonSample02(){
//フレームを作成します。
Frame frm = new Frame();
//フレームタイトルを指定します。
frm.setTitle("ButtonSample02");
//フレームサイズを指定します。
frm.setSize(300,300);
//無名クラスを使用してFrameを閉じます。
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//ボタンコンポーネントを作成します。
btn1 = new Button("Button1");
//ボタンのActionListenerを追加します。
btn1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
btn1.setLabel("Clicked");    
}
});
//フレームにボタンを追加します。
frm.add(btn1);
//フレームを表示します。
frm.setVisible(true);  
}
}

Java AWT Labelコンポーネント

package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class LabelSample {

/*
* エントリポイント
*/
public static void main(String args[]){
new LabelSample();
}

/*
* コンストラクタ
*/
public LabelSample(){
//フレームを作成します。
Frame frm = new Frame();
//フレームタイトルを指定します。
frm.setTitle("LabelSample");
//フレームサイズを指定します。
frm.setSize(300,300);
//無名クラスを使用してFrameを閉じます。
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//ラベルコンポーネントを作成します。
Label lbl1 = new Label();
lbl1.setText("Hello Java");
//フレームにラベルに追加します。
frm.add(lbl1);
//フレームを表示します。
frm.setVisible(true);  
}

}


Java AWT ウインドウ(Frame)を閉じる

AWT ウインドウ(Frame)を閉じる

イベントリスナーWindowListenerを使用する方法


WindowListenerクラスはウインドウ関連のイベントを処理するためのイベントリスナーです。
WindowListenerをimplementsしたクラスは、WindowListenerがもつ7つのメソッドすべて実装する必要があります。
ウインドウを閉じるには7つのメソッドのうちwindowClosingメソッドのみを使用します。
package MyPackage1;

import java.awt.Frame;
import java.awt.event.*;

public class FrameCloseSample01 {
/*
* エントリポイント
*/
public static void  main(String args[]){
new FrameCloseSample01();
}

/*
* コンストラクタ
*/
public FrameCloseSample01(){
//フレームを作成します。
Frame frm = new Frame();
//フレームタイトルを指定します。
frm.setTitle("FrameCloseSample01");
//フレームサイズを指定します。
frm.setSize(300,300);
//イベントリスナーを追加します。
frm.addWindowListener(new frmWindowAdapter());
//フレームを表示します。
frm.setVisible(true);  
}

/*
* FrameのWindowListenerクラスです。
*/
private class frmWindowAdapter implements WindowListener{
@Override
public void windowActivated(WindowEvent arg0) {
// TODO 自動生成されたメソッド・スタブ
}

@Override
public void windowClosed(WindowEvent arg0) {
// TODO 自動生成されたメソッド・スタブ
}

@Override
public void windowClosing(WindowEvent arg0) {
// TODO 自動生成されたメソッド・スタブ
System.exit(0);
}

@Override
public void windowDeactivated(WindowEvent arg0) {
// TODO 自動生成されたメソッド・スタブ   
}

@Override
public void windowDeiconified(WindowEvent arg0) {
// TODO 自動生成されたメソッド・スタブ
}

@Override
public void windowIconified(WindowEvent arg0) {
// TODO 自動生成されたメソッド・スタブ
}

@Override
public void windowOpened(WindowEvent arg0) {
// TODO 自動生成されたメソッド・スタブ
}
}
}



無名クラスを使用して閉じる方法


package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class FrameCloseSample02 {

/*
* エントリポイント
*/
public static void main(String args[]){
new FrameCloseSample02();
}

/*
* コンストラクタ
*/
public FrameCloseSample02(){
//フレームを作成します。
Frame frm = new Frame();
//フレームタイトルを指定します。
frm.setTitle("FrameCloseSample02");
//フレームサイズを指定します。
frm.setSize(300,300);
//無名クラスを使用してFrameを閉じます。
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//フレームを表示します。
frm.setVisible(true);  
}
}

WindowAdapterクラスはあらかじめWindowListenerをimplementsし、すべてのメソッドをオーバライド済みにしたクラスです。必要なメソッドのみオーバーライドして使用します。

Java AWT ウインドウ(Frame)を表示する

AWTを使用してウインドウ(Frame)を表示します。

package MyPackage1;

import java.awt.*;

public class FrameSample {
/*
* エントリポイント
*/
public static void main(String args[]){
new FrameSample();
}

/*
* コンストラクタ
*/
public FrameSample(){
//フレームを作成します。
Frame frm = new Frame();
//フレームタイトルを指定します。
frm.setTitle("FrameSample");
//フレームサイズを指定します。
frm.setSize(300,300);
//フレームを表示します。
frm.setVisible(true);
}
}

実行すると真っ白のウインドウが起動します。
×ボタンで閉じられませんので、eclipseより停止ボタン(コンソールウインドウを選択したときに表示される赤い四角いボタン)で停止します。

Java GUIプログラムを作成するには

JavaでGUIプログラムを作成するには「AWT」または「Swing」を使用します。

AWT(Abstract Window Toolkit)


Javaの標準GUIライブラリ。
非常にシンプル。
必要最低限のコンポーネント類は用意されているが、複雑な部品は用意されていない。
使いい方を覚えるのは比較的簡単。
シンプルだがあまり高度な事はできない。


Swing


AWTに比べると巨大で高度な機能を持ったライブラリ。
AWTにない複雑な部品が追加されている。
使いこなすのは大変。
複雑で使いこなすのは大変だが何でもできる


SwingはAWTを継承して作られているため、AWTで基本知識を学んだあと、Swingについて別途学ぶ必要があるそうです。

Java ワークスペース、プロジェクト、パッケージ、クラス作成までの基本

ワークスペースの作成


ワークスペースとは .NETのソリューションに当たるもの。
Eclipseの「ファイル」メニュー→「ワークスペースの切替」によりワークスペースの新規作成や切り替えを行う。

プロジェクトの作成


Eclipseの「ファイル」メニュー→「新規」→「プロジェクト」をクリックすると「新規プロジェクト」画面が起動する。
プロジェクトの種類はたくさんあるが、とりあえず「Java」ノードより「Javaプロジェクト」を選択。

プロジェクト名を入力します。

あとはデフォルトのまま。


パッケージの作成


パッケージとは.NETのネームスペースに当たるもの。
Eclipseのパッケージエクスプローラーから、パッケージを追加したいプロジェクトを選択し、
右クリックメニューより「新規」→「パッケージ」をクリックすると「新規Javaパッケージ」画面が起動する。
パッケージ名を入力します。


クラスの作成


Eclipseのパッケージエクスプローラーから、クラスを追加したいパッケージを選択し、
右クリックメニューより「新規」→「クラス」をクリックすると「新規Javaクラス」画面が起動する。
クラス名を入力します。


実行方法


「クラスの作成」で作成したMyClass1クラスに以下のコードを記載。
package MyPackage1;

public class MyClass1 {

public static void main(String args[]){
System.out.println("Hello Java");
}
}


画面上部の実行ボタンをクリックし、「Javaアプリケーション」で実行します。
コンソールウインドウに「Hello Java」と表示されればOKです。

2009年5月1日金曜日

.NET 西暦と和暦を変換するには

西暦から和暦に変換するには



2009年05月01日を平成21年05月01日に変換するには、JapaneseCalendarクラス(System.Globalization名前空間)を使用します。
Dim culture As New System.Globalization.CultureInfo("ja-JP", True)
culture.DateTimeFormat.Calendar = New System.Globalization.JapaneseCalendar()

Dim target As DateTime = New DateTime(2009,5,1)
Console.WriteLine(target.ToString("ggyy年MM月dd日", culture))
'出力:平成21年05月01日



2009年05月01日をH21年05月01日に変換するには、JapaneseCalendarクラスのAbbreviatedEnglishEraNamesプロパティにリフレクションを利用してアクセスすることで変換できます。
これは、.NET Frameworkでは推奨されていないプロパティに対するアクセスなので、今後.NET Frameworkがバージョンアップすることで利用できなくなる可能性があることを留意しましょう。
Dim target As DateTime = New DateTime(2009, 5, 1)

Dim culture As New System.Globalization.CultureInfo("ja-JP", True)
Dim calendar As New System.Globalization.JapaneseCalendar()
Dim formatInfo As System.Globalization.DateTimeFormatInfo
formatInfo = culture.DateTimeFormat
formatInfo.Calendar = calendar

Dim t As Type = formatInfo.GetType
Dim pi As System.Reflection.PropertyInfo
pi = t.GetProperty("AbbreviatedEnglishEraNames", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
Dim eraNames() As String = CType(pi.GetValue(formatInfo, Nothing), String())
Dim era As Integer = formatInfo.Calendar.GetEra(target)
Dim eraName As String = eraNames(era - 1)

Console.WriteLine(eraName & target.ToString("yy年MM月dd日", culture))
'出力:H21年05月01日  



JapaneseCalendarクラスのGetEraメソッドは、指定された日付時刻が示す元号を取得できます。
結果は1が明治、2が大正、3が昭和、4が平成となります。

JapaneseCalendarクラスの
AbbreviatedEnglishEraNamesプロパティは、和暦のアルファベット略称(平成はH、昭和はSなど)を取得できます。
AbbreviatedEraNamesプロパティは、和暦の略称(平成は平、昭和は昭など)を取得できます。
EraNamesプロパティは、和暦の漢字(平成、昭和など)を取得できます。


和暦から西暦に変換するには



平成21年05月01日を2009年05月01日に変換するには、JapaneseCalendarクラス(System.Globalization名前空間)を使用します。
Dim target As String = "平成21年05月01日"

Dim culture As New System.Globalization.CultureInfo("ja-JP", True)
culture.DateTimeFormat.Calendar = New System.Globalization.JapaneseCalendar()
Dim result As DateTime = DateTime.ParseExact(target, "ggyy年MM月dd日", culture)

Console.WriteLine(result.ToString)
'出力:2009/05/01 0:00:00


H21年05月01日を2009年05月01日に変換するには、「H」を「平成」に置換したのち、変換します。
Dim target As String = "H21年05月01日"

Dim culture As New System.Globalization.CultureInfo("ja-JP", True)
Dim calendar As New System.Globalization.JapaneseCalendar()
Dim formatInfo As System.Globalization.DateTimeFormatInfo
formatInfo = culture.DateTimeFormat
formatInfo.Calendar = calendar

Dim t As Type = formatInfo.GetType
Dim pi As System.Reflection.PropertyInfo

pi = t.GetProperty("EraNames", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
Dim eraNames() As String = CType(pi.GetValue(formatInfo, Nothing), String())

pi = t.GetProperty("AbbreviatedEnglishEraNames", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
Dim abbrevEnglishEraNames() As String = CType(pi.GetValue(formatInfo, Nothing), String())

For idx As Integer = 0 To abbrevEnglishEraNames.Length - 1
If target.Contains(abbrevEnglishEraNames(idx)) Then
target = target.Replace(abbrevEnglishEraNames(idx), eraNames(idx))
Exit For
End If
Next

Dim result As DateTime = DateTime.ParseExact(target, "ggyy年MM月dd日", culture)
Console.WriteLine(result.ToString)
'出力:2009/05/01 0:00:00