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です。

.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

.NET カスタムコントロールのプロパティウインドウのカスタマイズ

カスタムコントロールのプロパティウインドウをカスタマイズするには属性を設定します。

DefaultProperty属性
クラスの「既定のプロパティ」を指定する。
この属性はクラスに指定する。  
この属性で指定されたプロパティは、PropertyGridコントロールが表示されるときに最初にフォーカスが設定される。

DefaultValue属性
プロパティの「既定の値」を指定する。

ReadOnly属性
この属性をTrueに指定すると、PropertyGridコントロールで編集することができなくなる。
ただし、コードから設定することは可能である

Browsable属性(Boolean値)
この属性をFalseに指定すると、PropertyGridコントロールに表示されなくなる。

Description属性)
プロパティの「概要説明」を指定する。

Category属性
プロパティの「カテゴリ」を指定する。

EditorBrowsable属性
インテリセンス上での表示方法を指定する。


<Browsable(False), EditorBrowsable(EditorBrowsableState.Advanced)> _
Public Shadows Property Image() As System.Drawing.Image
Get
Return MyBase.Image
End Get
Set(ByVal value As System.Drawing.Image)
MyBase.Image = value
End Set
End Property


※既存のプロパティはOverridesかShdowsで再定義し、属性を設定する。
このときPubicをPrivateなどと修飾子を変更すると属性が生きない。

また、DefaultValue属性では既定値にならない場合もある。
この場合はShouldSerializeXxxxメソッド、ResetXxxxメソッドを使用する。(Xxxxはプロパティ名)
  Protected Shared Shadows DefaultText As String = "ABC"

Public Shadows Property Text() As String
Get
Return MyBase.Text
End Get
Set(ByVal value As String)
MyBase.Text = value
End Set
End Property

Public Function ShouldSerializeText() As Boolean
Return Not (DefaultText.Equals(MyBase.Text))
End Function

Public Shadows Sub ResetText()
Me.Text = DefaultText
End Sub

.NET アセンブリのリソースファイルより画像を取得するには

'スタートアッププロジェクトのアセンブリを取得します。
Dim asm As System.Reflection.Assembly  
asm = System.Reflection.Assembly.GetEntryAssembly  
'指定したアセンブリより「Resouce1」リソースを取得します。
Dim resource As New System.Resources.ResourceManager(asm.GetName().Name + ".Resource1", asm )
'リソースより画像を取得します。
Dim bmp As Bitmap = CType(resource.GetObject("test_Image"), Bitmap)
me.Button1.Image = bmp


アセンブリを取得する方法はこちらを参照してください。
アセンブリを取得するには