[Wtypes.hに含まれるアンマネージ型]:[アンマネージC言語型]:[マネージクラス名]:[説明][HANDLE]:[void*]:[System.IntPtr]:[32ビット]
[BYTE]:[unsigned]:[char]:[System.Byte]:[8ビット]
[SHORT]:[short]:[System.Int16]:[16ビット]
[WORD]:[unsigned]:[short]:[System.UInt16]:[16ビット]
[INT]:[int]:[System.Int32]:[32ビット]
[UINT]:[unsigned]:[int]:[System.UInt32]:[32ビット]
[LONG]:[long]:[System.Int32]:[32ビット]
[BOOL]:[long]:[System.Int32]:[32ビット]
[DWORD]:[unsigned]:[long]:[System.UInt32]:[32ビット]
[ULONG]:[unsigned]:[long]:[System.UInt32]:[32ビット]
[CHAR]:[char]:[System.Char]:[ANSIにより装飾]
[LPSTR]:[char*]:[System.StringまたはSystem.StringBuilder]:[ANSIにより装飾]
[LPCSTR]:[Const]:[char*]:[System.StringまたはSystem.StringBuilder]:[ANSIにより装飾]
[LPWSTR]:[wchar_t*]:[System.StringまたはSystem.StringBuilder]:[Unicodeにより装飾]
[LPCWSTR]:[Const]:[wchar_t*]:[System.StringまたはSystem.StringBuilder]:[Unicodeにより装飾]
[FLOAT]:[Float]:[System.Single]:[32ビット]
[DOUBLE]:[Double]:[System.Double]:[64ビット]
[クラス名]:[説明]:[Visual Basic のデータ型]:[C# のデータ型]:[C++ マネージ拡張のデータ型]:[JScript のデータ型]
●整数
[Byte]:[8ビット符号なし整数]:[Byte]:[byte]:[char]:[Byte]
[SByte]:[8ビット符号付き整数(非CLS準拠)]:[SByte(非組み込み型)]:[sbyte]:[signed char]:[SByte]
[Int16]:[16ビット符号付き整数]:[Short]:[short]:[short]:[short][Int32]:[32ビット符号付き整数]:[Integer]:[int]:[intまたはlong]:[int]
[Int64]:[64ビット符号付き整数]:[Long]:[long]:[__int64]:[long]
[UInt16]:[16ビット符号なし整数(非CLS準拠)]:[UInt16(非組み込み型)]:[ushort]:[unsigned short]:[UInt16]
[UInt32]:[32ビット符号なし整数(非CLS準拠)]:[UInt32(非組み込み型)]:[uint]:[unsigned intまたはunsigned long]:[UInt32]
[UInt64]:[64 ビット符号なし整数(非CLS準拠)]:[UInt64(非組み込み型)]:[ulong]:[unsigned __int64]:[UInt64]
●浮動小数点数
[Single]:[単精度 (32 ビット) 浮動小数点数]:[Single]:[float]:[float]:[float]
[Double]:[倍精度 (64 ビット) 浮動小数点数]:[Double]:[double]:[double]:[double]
●論理型
[Boolean]:[ブール値 (true または false)]:[Boolean]:[bool]:[bool]:[bool]
●その他
[Char]:[Unicode (16 ビット) 文字]:[Char]:[char]:[wchar_t]:[char]
[Decimal]:[96ビット10進値]:[Decimal]:[decimal]:[Decimal]:[Decimal]
[IntPtr]:[基になるプラットフォームによってサイズが決まる符号付き整数 (32 ビットのプラットフォームでは 32 ビット値、64 ビットのプラットフォームでは 64 ビット値) ]:[IntPtr(非組み込み型)]:[IntPtr(非組み込み型)]:[IntPtr(非組み込み型)]:[IntPtr]
[UIntPtr]:[基になるプラットフォームによってサイズが決まる符号なし整数 (32 ビットのプラットフォームでは 32 ビット値、64 ビットのプラットフォームでは 64 ビット値)(非CLS準拠)]:[UIntPtr(非組み込み型)]:[UIntPtr(非組み込み型)]:[UIntPtr(非組み込み型)]:[UIntPtr]
●クラス オブジェクト
[Object]:[オブジェクト階層構造のルート]:[Object]:[object]:[Object*]:[Object]
[String]:[Unicode 文字の不変固定長文字列]:[String]:[string]:[String*]:[String]
[整数型のサイズ]:[Visual Basic 6.0 の型と識別子の型文字]:[Visual Basic 2005 の型と識別子の型文字]:[共通言語ランタイム (CLR) の型]
[8ビット、符号付き]:[(なし)]:[SByte (なし)]:[System.SByte]
[8ビット、符号なし]:[Byte (なし)]:[Byte (なし)]:[System.Byte]
[16ビット、符号付き]:[Integer (%)]:[Short (なし)]:[System.Int16]
[16ビット、符号なし]:[(なし)]:[UShort (なし)]:[System.UInt16]
[32ビット、符号付き]:[Long (&)]:[Integer (%)]:[System.Int32]
[32ビット、符号なし]:[(なし)]:[UInteger (なし)]:[System.UInt32]
[64ビット、符号付き]:[(なし)]:[Long (&)]:[System.Int64]
[64ビット、符号なし]:[(なし)]:[ULong (なし)]:[System.UInt64]
32 ビット システムでは、32 ビット整数の演算の方が、16 ビットまたは 64 ビットの整数演算よりも高速です。つまり、Visual Basic 2005 では、Integer と UInteger は、効率の優れた基本的な数値型です。Visual Basic 2005 に移行するときに Long 宣言を Integer(Int32) に変更すると、アプリケーションのパフォーマンスを向上させることができます。
■参考サイト
プラットフォーム呼び出しによるデータのマーシャリング
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconmarshalingdatawithplatforminvoke.asp
.NET Framework クラス ライブラリの概要
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconthenetframeworkclasslibrary.asp
AdMax右サイドバー広告
土曜日, 4月 28, 2007
[VBA or VB2005]VBAとVBで同じ処理をしたいとき?
▼質問
VBAとVBで同じ処理をしたいときはどうしたらいいのだろう?
▼回答
VCでDLLを作成してWin32APIのように呼ぶしかないのかな?
このサイトに.NETでCOMとして作成してVBA側で参照設定をして使用できる方法もあると
書いてあるがどうなんだろう?
(このサイトはいろんな情報が充実していてすごい!すばらしい!!)
http://7ujm.net/VB/VBAVBnetActiveX.html
VB2005で試しにやってみたらCOMの登録でアセンブリの警告が出た!
作成方法
①プロジェクトの作成でクラスライブラリ(DLLの作成)を選ぶ。
②クラスファイルにコードを記述する。
③プロジェクトのプロパティから「コンパイル」を選択して「COM相互運用機能の登録(I)」を
チェックする。
④「スタート」→「全てのプログラム(P)」→「Microsoft Visual Studio 2005」→「Visual Studio Tools」
→「Visual Studio 2005 コマンド プロンプト」を起動してCOMの登録を行う。
C:\>regasm ○○○○○.dll /tlb /codebase
※解除方法:C:\>regasm ○○○○○.dll /unregister
ここで下記の問題?警告が発生!
「RegAsm : warning RA0000 : 署名されていないアセンブリを /codebase を使用して登録すると、同じコンピュータにインストールされるその他のアプリケーションとの競合が生じる可能性があります。/codebase スイッチは署名されたアセンブリのみに使用できます。アセンブリに厳密な名前を付けて、再登録してください。型は正常に登録されました。アセンブリは 'C:\○○○\○○○\○○○.tlb' にエクスポートされ、タイプ ライブラリは正常に登録されました。」
▼質問
アセンブリって何だ?
▼回答
署名のため機能らしい。
アセンブリを厳密名で署名するには?[VS 2005のみ]
http://www.atmarkit.co.jp/fdotnet/dotnettips/495strongname2005/strongname2005.html方法 : アセンブリに署名する (Visual Studio)
http://msdn2.microsoft.com/ja-jp/library/ms247123(VS.80).aspx
とりあえず実行してみたら下記のエラーが発生した。
「"ファイルまたはアセンブリ名 ○○○、またはその依存関係の 1 つが見つかりませんでした。"」
下記のサイトの手順で「<新規作成>」から適当なキー・ファイル「○○○_StrongName_Key」を
指定してパスワード無しでやったらうまく登録できたぞ!!ヤッター!!
アセンブリを厳密名で署名するには?[VS 2005のみ]
http://www.atmarkit.co.jp/fdotnet/dotnettips/495strongname2005/strongname2005.html
動かしてみたら今度はオートメーションエラーが発生!(;_;)...
パスが通っているところに移動して登録したら動いたが・・・。下記のエラーでうまくいかない。
「"ファイルまたはアセンブリ名 ○○○、またはその依存関係の 1 つが見つかりませんでした。"」
ここで、実験終了!この方法はとりあえず諦める事にしました。
Visual Basic 6.0 から Visual Basic .NET または Visual Basic 2005 アセンブリを呼び出す方法
http://support.microsoft.com/default.aspx?scid=kb;ja;817248
↑このサイトを読んでいたら通常のクラスとCOMクラスの作成方法に違いがあることが判明!
このサイトの説明文も一部間違っているが。。。。(重要なところ!)
9.[テンプレート] で [クラス] をクリックします。
→9.[テンプレート] で [COMクラス] をクリックします。
もう一度とトライしてみたがまたもエラーでした。でもエラーの内容が変わった。
「"ActiveX コンポーネントはオブジェクトを作成できません。"」
■参考サイト
プログラミング色々
http://7ujm.net/index.html
Microsoft Win32 と Microsoft .NET Framework API との対応
http://www.microsoft.com/japan/msdn/net/general/win32map.aspx
Visual Basic .NET How-To インデックス
http://www.microsoft.com/japan/msdn/howto/howtoVB.asp
VBAとVBで同じ処理をしたいときはどうしたらいいのだろう?
▼回答
VCでDLLを作成してWin32APIのように呼ぶしかないのかな?
このサイトに.NETでCOMとして作成してVBA側で参照設定をして使用できる方法もあると
書いてあるがどうなんだろう?
(このサイトはいろんな情報が充実していてすごい!すばらしい!!)
http://7ujm.net/VB/VBAVBnetActiveX.html
VB2005で試しにやってみたらCOMの登録でアセンブリの警告が出た!
作成方法
①プロジェクトの作成でクラスライブラリ(DLLの作成)を選ぶ。
②クラスファイルにコードを記述する。
③プロジェクトのプロパティから「コンパイル」を選択して「COM相互運用機能の登録(I)」を
チェックする。
④「スタート」→「全てのプログラム(P)」→「Microsoft Visual Studio 2005」→「Visual Studio Tools」
→「Visual Studio 2005 コマンド プロンプト」を起動してCOMの登録を行う。
C:\>regasm ○○○○○.dll /tlb /codebase
※解除方法:C:\>regasm ○○○○○.dll /unregister
ここで下記の問題?警告が発生!
「RegAsm : warning RA0000 : 署名されていないアセンブリを /codebase を使用して登録すると、同じコンピュータにインストールされるその他のアプリケーションとの競合が生じる可能性があります。/codebase スイッチは署名されたアセンブリのみに使用できます。アセンブリに厳密な名前を付けて、再登録してください。型は正常に登録されました。アセンブリは 'C:\○○○\○○○\○○○.tlb' にエクスポートされ、タイプ ライブラリは正常に登録されました。」
▼質問
アセンブリって何だ?
▼回答
署名のため機能らしい。
アセンブリを厳密名で署名するには?[VS 2005のみ]
http://www.atmarkit.co.jp/fdotnet/dotnettips/495strongname2005/strongname2005.html方法 : アセンブリに署名する (Visual Studio)
http://msdn2.microsoft.com/ja-jp/library/ms247123(VS.80).aspx
とりあえず実行してみたら下記のエラーが発生した。
「"ファイルまたはアセンブリ名 ○○○、またはその依存関係の 1 つが見つかりませんでした。"」
下記のサイトの手順で「<新規作成>」から適当なキー・ファイル「○○○_StrongName_Key」を
指定してパスワード無しでやったらうまく登録できたぞ!!ヤッター!!
アセンブリを厳密名で署名するには?[VS 2005のみ]
http://www.atmarkit.co.jp/fdotnet/dotnettips/495strongname2005/strongname2005.html
動かしてみたら今度はオートメーションエラーが発生!(;_;)...
パスが通っているところに移動して登録したら動いたが・・・。下記のエラーでうまくいかない。
「"ファイルまたはアセンブリ名 ○○○、またはその依存関係の 1 つが見つかりませんでした。"」
ここで、実験終了!この方法はとりあえず諦める事にしました。
Visual Basic 6.0 から Visual Basic .NET または Visual Basic 2005 アセンブリを呼び出す方法
http://support.microsoft.com/default.aspx?scid=kb;ja;817248
↑このサイトを読んでいたら通常のクラスとCOMクラスの作成方法に違いがあることが判明!
このサイトの説明文も一部間違っているが。。。。(重要なところ!)
9.[テンプレート] で [クラス] をクリックします。
→9.[テンプレート] で [COMクラス] をクリックします。
もう一度とトライしてみたがまたもエラーでした。でもエラーの内容が変わった。
「"ActiveX コンポーネントはオブジェクトを作成できません。"」
■参考サイト
プログラミング色々
http://7ujm.net/index.html
Microsoft Win32 と Microsoft .NET Framework API との対応
http://www.microsoft.com/japan/msdn/net/general/win32map.aspx
Visual Basic .NET How-To インデックス
http://www.microsoft.com/japan/msdn/howto/howtoVB.asp
金曜日, 4月 27, 2007
[VC++]メモ
▼質問
UNREFERENCED_PARAMETERって何?returnの後に記述している?何だ!
▼回答
UNREFERENCED_PARAMETERマクロらしい。引数として受け取った変数を1度も使用しなかった
ときにでるコンパイル時の警告を回避するためのものらしい。
UNREFERENCED_PARAMETERって何?returnの後に記述している?何だ!
▼回答
UNREFERENCED_PARAMETERマクロらしい。引数として受け取った変数を1度も使用しなかった
ときにでるコンパイル時の警告を回避するためのものらしい。
土曜日, 4月 21, 2007
[VBA]Validation
「アプリケーション定義またはオブジェクト定義のエラーです。」のエラーがでる。
.Validation.Add Type:=Excel.XlDVType.xlValidateDecimal, AlertStyle:=Excel.XlDVAlertStyle.xlValidAlertStop, Operator:=Excel.XlFormatConditionOperator.xlGreater, Formula1:="-999999999"
xlValidateCustom:任意の数式を使用してデータを検証します。
xlValidateDate:日付値
xlValidateDecimal:数値
xlValidateInputOnly:値が変更された場合のみ検証を行います。
xlValidateList:指定したリストに値が存在する必要があります。
xlValidateTextLength:文字列の長さ
xlValidateTime:時間値
xlValidateWholeNumber:全数値
xlValidAlertInformation:情報アイコン
xlValidAlertStop:停止アイコン
xlValidAlertWarning:警告アイコン
▼回答
どこでもいいからselectしないと駄目みたい。うまくいくときもあるのはよくわからない?
http://www.keep-on.com/excelyou/2002lng4/200208/02080364.txt
.Validation.Add Type:=Excel.XlDVType.xlValidateDecimal, AlertStyle:=Excel.XlDVAlertStyle.xlValidAlertStop, Operator:=Excel.XlFormatConditionOperator.xlGreater, Formula1:="-999999999"
xlValidateCustom:任意の数式を使用してデータを検証します。
xlValidateDate:日付値
xlValidateDecimal:数値
xlValidateInputOnly:値が変更された場合のみ検証を行います。
xlValidateList:指定したリストに値が存在する必要があります。
xlValidateTextLength:文字列の長さ
xlValidateTime:時間値
xlValidateWholeNumber:全数値
xlValidAlertInformation:情報アイコン
xlValidAlertStop:停止アイコン
xlValidAlertWarning:警告アイコン
▼回答
どこでもいいからselectしないと駄目みたい。うまくいくときもあるのはよくわからない?
http://www.keep-on.com/excelyou/2002lng4/200208/02080364.txt
土曜日, 4月 14, 2007
[VBA]
変数宣言の強制Option Explicit
配列インデックスの下限値を指定Option Base [01]
デフォルトは1
文字列比較の優先順位を指定Option Compare [TextBinary]
デフォルトはBinaryBinary A < B < E < Z < a < b < e < z
Text (A=a) < (B=b) < (E=e) < (Z=z)
配列インデックスの下限値を指定Option Base [01]
デフォルトは1
文字列比較の優先順位を指定Option Compare [TextBinary]
デフォルトはBinaryBinary A < B < E < Z < a < b < e < z
Text (A=a) < (B=b) < (E=e) < (Z=z)
金曜日, 4月 13, 2007
[VB.NET]CheckedListBox
Public Sub setCheckedListBoxSelected(ByRef oCListBox As CheckedListBox)
Dim value As Boolean = oCListBox.GetItemChecked(oCListBox.SelectedIndex) 'oCListBox.SetItemChecked(oCListBox.SelectedIndex, CBool(IIf(value.Equals(True), False, True))) oCListBox.SetItemCheckState(oCListBox.SelectedIndex, CType(IIf(value.Equals(True), CheckState.Unchecked, CheckState.Checked), System.Windows.Forms.CheckState)) If (oCListBox.SelectedIndex >= 0) Then oCListBox.SetSelected(oCListBox.SelectedIndex, False) oCListBox.Show()
End Sub
Dim value As Boolean = oCListBox.GetItemChecked(oCListBox.SelectedIndex) 'oCListBox.SetItemChecked(oCListBox.SelectedIndex, CBool(IIf(value.Equals(True), False, True))) oCListBox.SetItemCheckState(oCListBox.SelectedIndex, CType(IIf(value.Equals(True), CheckState.Unchecked, CheckState.Checked), System.Windows.Forms.CheckState)) If (oCListBox.SelectedIndex >= 0) Then oCListBox.SetSelected(oCListBox.SelectedIndex, False) oCListBox.Show()
End Sub
気になる記事
http://itpro.nikkeibp.co.jp/article/COLUMN/20070410/267878/?ST=biz_shinzui
バグの発生率を示す数式があるという話だった。開発工数や進捗の度合い、プログラムの本数などに基づき、ある数式で計算するとバグの発生率が算出でき、実際に発生するバグとの誤差は5%の範囲に収まるという。
プログラムの品質は、作成に時間がかかった部分があまり高くない
バグの発生率を示す数式があるという話だった。開発工数や進捗の度合い、プログラムの本数などに基づき、ある数式で計算するとバグの発生率が算出でき、実際に発生するバグとの誤差は5%の範囲に収まるという。
プログラムの品質は、作成に時間がかかった部分があまり高くない
火曜日, 4月 10, 2007
[VB.NET]Option Strict OnとOffの比較(OO4O接続)
■OO4Oを使用したデータベース接続方法でOption StrictをOnにした時とOffにした時での
比較をしてみる。
Option StrictをOffにしたとき
Dim oraDb As OracleInProcServer.OraDatabase
Dim oraDynaset As OracleInProcServer.OraDynaset
Dim fieldValue as Integer
oraDynaset = oraDb.CreateDynaset("select * from table", 0&)
If oraDynaset.RecordCount > 0 Then
fieldValue = oraDynaset.Fields("FIELDNAME").Value
End If
Option StrictをONにすると次のようになる。
Dim oraDb As OracleInProcServer.OraDatabase
Dim oraDynaset As OracleInProcServer.OraDynaset
Dim fieldValue as Integer
oraDynaset = CType(oraDb.CreateDynaset("select * from table", 0&), OracleInProcServer.OraDynaset)
If oraDynaset.RecordCount > 0 Then
fieldValue = CInt(DirectCast(DirectCast(oraDynaset.Fields, OracleInProcServer.OraFields)("FIELDNAME"), _ OracleInProcServer.OraField).Value)
End If
比較してみるとOption StrictはOffにした方が良さそうである。(^^)v
■参考サイト
KEN's .NET [特集4] Option Strict Onのススメ
http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp04_OptionStrictOn.html
比較をしてみる。
Option StrictをOffにしたとき
Dim oraDb As OracleInProcServer.OraDatabase
Dim oraDynaset As OracleInProcServer.OraDynaset
Dim fieldValue as Integer
oraDynaset = oraDb.CreateDynaset("select * from table", 0&)
If oraDynaset.RecordCount > 0 Then
fieldValue = oraDynaset.Fields("FIELDNAME").Value
End If
Option StrictをONにすると次のようになる。
Dim oraDb As OracleInProcServer.OraDatabase
Dim oraDynaset As OracleInProcServer.OraDynaset
Dim fieldValue as Integer
oraDynaset = CType(oraDb.CreateDynaset("select * from table", 0&), OracleInProcServer.OraDynaset)
If oraDynaset.RecordCount > 0 Then
fieldValue = CInt(DirectCast(DirectCast(oraDynaset.Fields, OracleInProcServer.OraFields)("FIELDNAME"), _ OracleInProcServer.OraField).Value)
End If
比較してみるとOption StrictはOffにした方が良さそうである。(^^)v
■参考サイト
KEN's .NET [特集4] Option Strict Onのススメ
http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp04_OptionStrictOn.html
土曜日, 4月 07, 2007
[VB.NET]メモ
メンバ=定数=等価なキャラクタ文字:説明
CrLf=vbCrLf=Chr(13) + Chr(10):キャリッジ リターン文字とライン フィード文字の組み合わせ。
Cr=vbCr=Chr(13):キャリッジ リターン文字。
Lf=vbLf=Chr(10):ライン フィード文字。
NewLine=vbNewLine=Chr(13) + Chr(10):改行文字。
Tab=vbTab=Chr(9):タブ文字。
Option Strict Onの時、以下の項目が禁止され、ビルド時にエラーになる。
・明示的なキャスト演算子を使用しない縮小変換
・遅延バインディング
・Object 型での=、<>、TypeOf~Is~、およびIs以外の演算
・宣言でのAs句の省略
■関連サイト
http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_13/vbnet2_13_01.html
CrLf=vbCrLf=Chr(13) + Chr(10):キャリッジ リターン文字とライン フィード文字の組み合わせ。
Cr=vbCr=Chr(13):キャリッジ リターン文字。
Lf=vbLf=Chr(10):ライン フィード文字。
NewLine=vbNewLine=Chr(13) + Chr(10):改行文字。
Tab=vbTab=Chr(9):タブ文字。
Option Strict Onの時、以下の項目が禁止され、ビルド時にエラーになる。
・明示的なキャスト演算子を使用しない縮小変換
・遅延バインディング
・Object 型での=、<>、TypeOf~Is~、およびIs以外の演算
・宣言でのAs句の省略
■関連サイト
http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_13/vbnet2_13_01.html
土曜日, 3月 03, 2007
[Java]SQL関連
▼質問
NUMBER型のフィールドにnullを指定するにはどうすればいいの?
▼回答
setStringメソッドでnullを指定するか、setNullメソッドでTypes.NUMERIC を指定すればできるよ。
PreparedStatement pstmt = null;
pstmt.setString( parameterIndex, null );
pstmt.setNull( parameterIndex, Types.NUMERIC );
NUMBER型のフィールドにnullを指定するにはどうすればいいの?
▼回答
setStringメソッドでnullを指定するか、setNullメソッドでTypes.NUMERIC を指定すればできるよ。
PreparedStatement pstmt = null;
pstmt.setString( parameterIndex, null );
pstmt.setNull( parameterIndex, Types.NUMERIC );
金曜日, 2月 16, 2007
[Java]ポップアップメニュー(JPopupMenu)
▼質問
ポップアップメニューを、タイトル名と選択メニューの間にセパレーターを挟んだ感じで表示したいんだ。
どうしたらいいんだ?
▼回答
サンプルだよ!参考にしてくれ!!表示したいコンポーネントのマウスクリックイベントに追加すれば
右クリックで表示されるよ。
if ( javax.swing.SwingUtilities.isRightMouseButton(e) ) {
// 右クリック時の処理
JPopupMenu popupMenu = new JPopupMenu();
JLabel label = new JLabel( "タイトル");
label.setAlignmentX( JPopupMenu.CENTER_ALIGNMENT );
label.setHorizontalAlignment( JLabel.CENTER );
label.setFont( new java.awt.Font( "Monospaced", java.awt.Font.BOLD, 14 ) );
popupMenu.add( label );
JSeparator[] separator = new JSeparator[2];
for ( int i = 0 ; i < separator.length ; i++ ) {
separator[i] = new JSeparator( SwingConstants.HORIZONTAL );
popupMenu.add( separator[i] );
}
JMenuItem menuItem = new JMenuItem( "選択メニュー" );
menuItem.setHorizontalAlignment( JLabel.LEFT );
menuItem.setFont( new java.awt.Font( "Monospaced", java.awt.Font.PLAIN, 12 ) );
menuItem.setActionCommand( "選択メニュー" );
popupMenu.add( menuItem );
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
// マウスがクリックされたときのイベント処理
}
});
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mousePressed( java.awt.event.MouseEvent evt ) {
// コンポーネント上でマウスボタンが押されると呼ばれるイベント処理
}
});
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseReleased( java.awt.event.MouseEvent evt ) {
// コンポーネント上でマウスボタンが放されると呼ばれるイベント処理
}
});
if ( e.isPopupTrigger() ) {
popupMenu.show( e.getComponent(), e.getX(), e.getY() );
}
} else if( javax.swing.SwingUtilities.isMiddleMouseButton(e) ) {
// 中ボタンクリック時の処理
} else if( javax.swing.SwingUtilities.isLeftMouseButton(e) ) {
// 左クリック時の処理
}
ポップアップメニューを、タイトル名と選択メニューの間にセパレーターを挟んだ感じで表示したいんだ。
どうしたらいいんだ?
▼回答
サンプルだよ!参考にしてくれ!!表示したいコンポーネントのマウスクリックイベントに追加すれば
右クリックで表示されるよ。
if ( javax.swing.SwingUtilities.isRightMouseButton(e) ) {
// 右クリック時の処理
JPopupMenu popupMenu = new JPopupMenu();
JLabel label = new JLabel( "タイトル");
label.setAlignmentX( JPopupMenu.CENTER_ALIGNMENT );
label.setHorizontalAlignment( JLabel.CENTER );
label.setFont( new java.awt.Font( "Monospaced", java.awt.Font.BOLD, 14 ) );
popupMenu.add( label );
JSeparator[] separator = new JSeparator[2];
for ( int i = 0 ; i < separator.length ; i++ ) {
separator[i] = new JSeparator( SwingConstants.HORIZONTAL );
popupMenu.add( separator[i] );
}
JMenuItem menuItem = new JMenuItem( "選択メニュー" );
menuItem.setHorizontalAlignment( JLabel.LEFT );
menuItem.setFont( new java.awt.Font( "Monospaced", java.awt.Font.PLAIN, 12 ) );
menuItem.setActionCommand( "選択メニュー" );
popupMenu.add( menuItem );
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
// マウスがクリックされたときのイベント処理
}
});
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mousePressed( java.awt.event.MouseEvent evt ) {
// コンポーネント上でマウスボタンが押されると呼ばれるイベント処理
}
});
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseReleased( java.awt.event.MouseEvent evt ) {
// コンポーネント上でマウスボタンが放されると呼ばれるイベント処理
}
});
if ( e.isPopupTrigger() ) {
popupMenu.show( e.getComponent(), e.getX(), e.getY() );
}
} else if( javax.swing.SwingUtilities.isMiddleMouseButton(e) ) {
// 中ボタンクリック時の処理
} else if( javax.swing.SwingUtilities.isLeftMouseButton(e) ) {
// 左クリック時の処理
}
木曜日, 2月 15, 2007
[Java]コンポーネントの操作不可
■JButton
JButton.setEnabled( false );
■JTextField
JTextField.setEditable( false );
■JSpinner
((JSpinner.DefaultEditor)JSpinner.getEditor()).getTextField().setEditable( false );
JSpinner.getComponent(0).setEnabled( false );
JSpinner.getComponent(1).setEnabled( false );
イベント処理でチェックが必要!
JSpinner.getComponent(1).addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
if ( !evt.getComponent().isEnabled() ) return;
}
});
■JCheckBox
JCheckBox.setEnabled( false );
■JFormattedTextField
JFormattedTextField.setEditable( false );
JButton.setEnabled( false );
■JTextField
JTextField.setEditable( false );
■JSpinner
((JSpinner.DefaultEditor)JSpinner.getEditor()).getTextField().setEditable( false );
JSpinner.getComponent(0).setEnabled( false );
JSpinner.getComponent(1).setEnabled( false );
イベント処理でチェックが必要!
JSpinner.getComponent(1).addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
if ( !evt.getComponent().isEnabled() ) return;
}
});
■JCheckBox
JCheckBox.setEnabled( false );
■JFormattedTextField
JFormattedTextField.setEditable( false );
水曜日, 2月 07, 2007
[Java]ファイル入出力ストリーム関連
public int FileRead( String fname ) {
int ret = 0;
BufferedReader reader = null;
if ( fname == null ) return -1;
try {
reader = new BufferedReader( new FileReader( fname ) );
String line = null;
while ( (line = reader.readLine()) != null ) {
System.out.println( line );
ret++;
}
}
catch ( FileNotFoundException e ) {
System.out.println( "ファイルが見つかりません。" );
ret = -2;
}
catch ( IOException e ) {
System.out.println( "入出力エラーです。" );
ret = -3;
}
finally {
try {
if ( reader != null ) reader.close();
}
catch ( Exception e ) {}
}
return ret;
}
int ret = 0;
BufferedReader reader = null;
if ( fname == null ) return -1;
try {
reader = new BufferedReader( new FileReader( fname ) );
String line = null;
while ( (line = reader.readLine()) != null ) {
System.out.println( line );
ret++;
}
}
catch ( FileNotFoundException e ) {
System.out.println( "ファイルが見つかりません。" );
ret = -2;
}
catch ( IOException e ) {
System.out.println( "入出力エラーです。" );
ret = -3;
}
finally {
try {
if ( reader != null ) reader.close();
}
catch ( Exception e ) {}
}
return ret;
}
火曜日, 1月 16, 2007
[JavaScript]
currentElementNo = 0;
function nextElement( keyCode ) {
if (keyCode == 13) {
currentElementNo++;
currentElementNo %= document.formA.elements.length;
if ( document.formA.elements[currentElementNo].type != 'button') {
document.formA.elements[currentElementNo].focus();
} else {
currentElementNo++;
}
}
}
HTML部
'<'body onkeydown="nextElement(event.keyCode); return true;">
function nextElement( keyCode ) {
if (keyCode == 13) {
currentElementNo++;
currentElementNo %= document.formA.elements.length;
if ( document.formA.elements[currentElementNo].type != 'button') {
document.formA.elements[currentElementNo].focus();
} else {
currentElementNo++;
}
}
}
HTML部
'<'body onkeydown="nextElement(event.keyCode); return true;">
土曜日, 1月 13, 2007
[Java]メモ4
▼質問
splitメソッドでピリオドを指定すると配列が返ってこないんだ?どうやって指定すればいいの?!
ピリオドは、プログラムで重要な意味を持っているのはわかるんだが・・・。
String value = "1.2";
String[] splits = value.split( "." );
▼回答
¥マークを頭に二つ付ければよいようだ。
String value = "1.2";
String[] splits = value.split( "¥¥." );
■参考サイト
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19125&forum=12&3
▼質問
ラベルをボタンスタイルに表示することは可能なの?
▼回答
可能だよ!
setBorderメソッドを使えばボタンをしたラベルが作成できるんだ。
クリックされたイベントもaddMouseListenerで登録すればボタン(ラベル)がクリックした時の
処理もすることができるんだ。
下記のプログラムは、種別によってスタイルを変えたいときに使用できる.
ボタン(ラベル)の上にきた時に種別1で呼び出してボタンが選択された状態にするのに使用できる.
private void setLabelStyle( JLabel label, int kind ) {
if ( kind == 1 ) {
label.setBorder( new CompoundBorder( new LineBorder( Color.RED, 3 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}
else {
label.setBorder( new CompoundBorder( new LineBorder( Color.BLACK, 2 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}
}
▼質問
「-Infinity」って何だ?
▼回答
「Infinity」は、無限大という文字列らしい。
正の無限大は「Infinity」で、負の無限大は「-Infinity」となるらしい。
■参考サイト
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Double.html
splitメソッドでピリオドを指定すると配列が返ってこないんだ?どうやって指定すればいいの?!
ピリオドは、プログラムで重要な意味を持っているのはわかるんだが・・・。
String value = "1.2";
String[] splits = value.split( "." );
▼回答
¥マークを頭に二つ付ければよいようだ。
String value = "1.2";
String[] splits = value.split( "¥¥." );
■参考サイト
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19125&forum=12&3
▼質問
ラベルをボタンスタイルに表示することは可能なの?
▼回答
可能だよ!
setBorderメソッドを使えばボタンをしたラベルが作成できるんだ。
クリックされたイベントもaddMouseListenerで登録すればボタン(ラベル)がクリックした時の
処理もすることができるんだ。
下記のプログラムは、種別によってスタイルを変えたいときに使用できる.
ボタン(ラベル)の上にきた時に種別1で呼び出してボタンが選択された状態にするのに使用できる.
private void setLabelStyle( JLabel label, int kind ) {
if ( kind == 1 ) {
label.setBorder( new CompoundBorder( new LineBorder( Color.RED, 3 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}
else {
label.setBorder( new CompoundBorder( new LineBorder( Color.BLACK, 2 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}
}
▼質問
「-Infinity」って何だ?
▼回答
「Infinity」は、無限大という文字列らしい。
正の無限大は「Infinity」で、負の無限大は「-Infinity」となるらしい。
■参考サイト
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Double.html
土曜日, 12月 23, 2006
[Java]Collection
▼質問
Mapオブジェクトを復帰値として可変で返却しているんだ。それを連続で格納しているんだけど
うまくかないんだ?
▼回答
Mapは、keyとvalueを組にして要素として保持しているからだよ!
Mapは、要素の順番を保持しなかったり、同一keyの要素は複数保持できなかったりするから
使い方には気をつけたほうがいいぞ。
前回値をclearメソッドで削除していなかったのが原因だったみたい。
例1)
TestMap testMap = new TestMap();
Map map = testMap.getMap();
例2)
TestMap testMap = new TestMap();
Map map = new HashMap();
map.putAll( testMap.getMap() );
上の2つのやり方は同じ結果が得られる。
■参考サイト
http://www.atmarkit.co.jp/fjava/javatips/098java012.html
Mapオブジェクトを復帰値として可変で返却しているんだ。それを連続で格納しているんだけど
うまくかないんだ?
▼回答
Mapは、keyとvalueを組にして要素として保持しているからだよ!
Mapは、要素の順番を保持しなかったり、同一keyの要素は複数保持できなかったりするから
使い方には気をつけたほうがいいぞ。
前回値をclearメソッドで削除していなかったのが原因だったみたい。
例1)
TestMap testMap = new TestMap();
Map map = testMap.getMap();
例2)
TestMap testMap = new TestMap();
Map map = new HashMap();
map.putAll( testMap.getMap() );
上の2つのやり方は同じ結果が得られる。
■参考サイト
http://www.atmarkit.co.jp/fjava/javatips/098java012.html
土曜日, 12月 09, 2006
[Java]Look&Feel
// 外観を設定します
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (InstantiationException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (UnsupportedLookAndFeelException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
// 外観を変更します
SwingUtilities.updateComponentTreeUI(this);
// サブコンポーネントの推奨サイズおよびレイアウトに合わせて
// この Window をサイズ変更するように設定
pack();
■参考サイト
http://www.hellohiro.com/swinglookandfeel.htm
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (InstantiationException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (UnsupportedLookAndFeelException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
// 外観を変更します
SwingUtilities.updateComponentTreeUI(this);
// サブコンポーネントの推奨サイズおよびレイアウトに合わせて
// この Window をサイズ変更するように設定
pack();
■参考サイト
http://www.hellohiro.com/swinglookandfeel.htm
木曜日, 11月 30, 2006
火曜日, 11月 28, 2006
[Java]Calendarクラス
▼質問
日付を表示するダイアログ内でCalendarクラスをaddしたんだけど次のエラーが出るんだ!?
Calendar calendar = Calendar.getInstance();
calendar = (Calendar)パラメータでもらったCalendarオブジェクト変数.clone();
calendar.add( Calendar.DATE, 1 );
java.lang.NullPointerException
at java.util.GregorianCalendar.getCurrentFixedDate(Unknown Source)
at java.util.GregorianCalendar.add(Unknown Source)
▼回答
時刻に変更したら回避できた?!なぜ?
calendar.add( Calendar.HOUR_OF_DAY, 24 );
▼質問
1970/01/01 00:00:00 からの通算秒をカレンダーオブジェクトに変換するにはどうするの?
▼回答
下記のようにすれば1970/01/01 00:00:00からの通算秒が設定できる。
Calendar calendar = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );
calendar.set( Calendar.YEAR, 1970 );
calendar.set( Calendar.MONTH, 0 );
calendar.set( Calendar.DATE, 1 );
calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );
calendar.add( Calendar.SECOND, 通算秒 );
又は、
Calendar calendar = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );
calendar.setTimeInMillis( 0 );
calendar.add( Calendar.SECOND, 通算秒 );
日付を表示するダイアログ内でCalendarクラスをaddしたんだけど次のエラーが出るんだ!?
Calendar calendar = Calendar.getInstance();
calendar = (Calendar)パラメータでもらったCalendarオブジェクト変数.clone();
calendar.add( Calendar.DATE, 1 );
java.lang.NullPointerException
at java.util.GregorianCalendar.getCurrentFixedDate(Unknown Source)
at java.util.GregorianCalendar.add(Unknown Source)
▼回答
時刻に変更したら回避できた?!なぜ?
calendar.add( Calendar.HOUR_OF_DAY, 24 );
▼質問
1970/01/01 00:00:00 からの通算秒をカレンダーオブジェクトに変換するにはどうするの?
▼回答
下記のようにすれば1970/01/01 00:00:00からの通算秒が設定できる。
Calendar calendar = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );
calendar.set( Calendar.YEAR, 1970 );
calendar.set( Calendar.MONTH, 0 );
calendar.set( Calendar.DATE, 1 );
calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );
calendar.add( Calendar.SECOND, 通算秒 );
又は、
Calendar calendar = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );
calendar.setTimeInMillis( 0 );
calendar.add( Calendar.SECOND, 通算秒 );
登録:
投稿 (Atom)