JAVAチュートリアルセッションファイブAWTグラフィカル・ユーザー・インターフェース・デザイン(1)

AWT 5.1グラフィカルユーザインタフェース生成
抽象ウィンドウツールキットは、グラフィカルユーザインターフェースGUI(グラフィックユーザインタフェース)は、Javaプログラムが提供するためのツールキットAPI、Javaアプレットとアプリケーションのために利用可能なAWTの確立であるパッケージAWT(アブストラクトウィンドウツールキット)を支持しますGUIプログラミング機能は、ユーザ・インターフェース・コンポーネントを、イベント処理モデル、形状、色、フォントクラスを含むグラフィック画像やツール、レイアウトマネージャ、ウィンドウは柔軟にかかわらず、特定のウィンドウの画面解像度のサイズとレイアウトとすることができます;データ転送クラスは、ネイティブプラットフォームによってカットアンドペーストクリップボードことができる
パッケージは、GUIデザインにより使用されるクラスおよびインタフェースを提供しているjava.awt 5.1.1 java.awtパッケージは、メイン図5.1からわかりますクラス間の関係
java.awtパッケージは、実質的にJavaのプログラムは主に以下の3つの概念を含むGUI設計ツールを提供する:
成分--Component
容器--Containerの
レイアウトマネージャ--LayoutManager
5.1.2コンポーネントとコンテナ
のJavaグラフィカル・ユーザ・インターフェース・コンポーネント(構成要素)の最も基本的なコンポーネントは、コンポーネントがグラフィカルに表示することができるされ、画面上にユーザを横断することができ 相互オブジェクトは、例えば、コンポーネントが独立して、特定のコンテナが表示される前にコンポーネントが配置されている必要があり、ラベルの外にボタンを表示等することができない。
クラスのjava.awt.Component多くのコンポーネントComponentクラスは、親クラスでありますパッケージング、グラフィックコンポーネントオブジェクト、サイズ、表示位置、前景と背景色などのコンポーネントの一般的なメソッドとプロパティ、境界線、可視性など、多くのコンポーネントクラスは、コンポーネントクラスのメンバ・メソッドとメンバ変数を継承し、対応この方法のメンバーは次のとおりです。
(INTのX、YをINT)にgetComponentAt
のgetFont()
getForeground()
のgetName()
のgetSize()
ペイント(グラフィックスG)
再描画()
更新()
のsetVisible(ブールB)
のsetSize(寸法D)
のsetName(文字列名)等
の容器の(コンテナ)、クラス、コンポーネント実際のサブクラス容器自体は、コンポーネントのすべてのプロパティを有し、従って成分であるが、その主な機能は、他のコンポーネントとコンテナを収容することである。
レイアウトマネージャ(のLayoutManager):各容器が有しています容器は、成分のその位置や大きさを決定するのに必要とされるレイアウトマネージャは、その対応するレイアウトマネージャをコールします。
私たちは、優れたプラットフォームに依存しない、Java言語を有するグラフィカルユーザインタフェースを生成するために、 。構成要素に直接方法の位置と大き使用せずに、容器内のコンポーネントのレイアウトを管理するために、このレイアウトマネージャーツールを提供する
プログラムのコンポーネントの配置位置とサイズは、次の点に留意すべきである:
1.容器をユーザーが、この場合には部品のこれらのプロパティを設定することはできませんので、レイアウトマネージャは、さまざまなコンポーネントのサイズと位置を担当しています。あなたが使用しようとすると、Java言語が提供します setLocation()は、setSize()、 setBounds() メソッドなど、レイアウトマネージャをカバーする。
2.ユーザが個人的に部品のサイズや位置を設定する必要がない場合、レイアウトマネージャは、コンテナを取り消すべきである、方法。
setLayoutの(NULL);
5.1.3共通の容器
。java.awt.Containerの容器は、コンポーネントのサブクラスであり、コンテナは複数の成分を受信し、それらを一体の容器を作ることができるが、全体的な構造にグラフィカルインターフェイスの設計を簡素化することができますすべてのコンテナのためのインターフェースの配置は、add()メソッドによって、コンテナにコンポーネントを追加することができる。
容器の3つのタイプがあります。窓、パネルのScrollPane、一般的に使用されるパネル、フレーム、アプレット
1.Frame
以下が容器の例である:
例5.1
java.awtのインポート* ;.
MyFrameとの公開クラスは、フレーム{拡張
公共の静的な無効メイン(文字列の引数[]){
; MyFrameとのMyFrameとの新しい新FR =(「!そこにこんにちは」)
//コンストラクタ
fr.setSize(200200);を
フレームサイズのデフォルト設定//(0、0)
fr.setBackground(Color.red);
//デフォルトの背景フレームが赤に設定
(真の)fr.setVisible;
//設定されたフレームが欠落している、見られるように州不可視
}
をMyFrame(文字列STR)の公開{
スーパー(文字列); //スーパークラスのコンストラクタを呼び出す
}
}
結果が稼働してご覧ください
我々は、インスタンス化し、ないに直接使用するためのウィンドウの外観、フレームウィンドウの通常サブクラスを生成したい.Frame Windowクラスの船をウィンドウのように、我々は通常、Windowsシステムで参照、タイトル、ボーダー、メニュー、サイズ等があり、各フレームのオブジェクトがインスタンス化され、サイズは目に見えないではありませんので、あなたは、サイズを設定するのsetSize()を呼び出す必要がありますされた後、表示されるようにウィンドウを設定する(真)のsetVisibleを呼び出す。
加えて、プロセスの実際の操作でAWTグラフィックスシステムので、異なるオペレーティング・システム・プラットフォームで実行されているAWTプログラムの同じ期間は、グラフィックスシステムを見ているプラットフォームを呼び出すことです。たとえば、Windowsの下で実行されている、Windowsスタイルは、ウィンドウを表示し、同じウィンドウではありません。その後、UNIXスタイルの表示窓UNIX、下で実行している間。
2.パネルの
例5.2
インポートjava.awtで* ;.
公衆FrameWithPanelフレーム{クラス延び
公共FrameWithPanel(文字列STR){
スーパー(STR)を;
}
公共の静的な無効メイン(文字列引数[]){
FrameWithPanel新しい新しいFrameWithPanel用のFR =( "パネルを有するフレーム");
パネルP =新しいパネル();
fr.setSize(200,200);
fr.setBackground(Color.red);
赤//フレームFRの背景色
fr.setLayout(NULL);
//キャンセルレイアウトマネージャ
pan.setSize(100,100);
pan.setBackground( Color.YELLOW);
//は、黄色のパンとパネルの背景色を設定し
fr.add(パン); // trueにfr.setVisibleでフレームFRパン()にパネルを追加する方法を追加します。
}
}
結果が稼働してご覧
通常私たちが望みます通常、インスタンス化されるフレームウィンドウのサブクラスで、ウィンドウを生成し、直接ではなく、ウィンドウクラス.Frameウィンドウを使用して、我々は通常、Windowsシステムに表示のように見える、タイトルがあり、ボーダー、メニュー、サイズなど等、各フレームのオブジェクトのインスタンス化の後、サイズが不可視ではない、それは、サイズを設定可視ウィンドウを設定するのsetVisible(true)をコールする。)(のsetSizeを呼び出す必要があり
、実際にはAWTを実行し、さらにプロセスは、グラフィックスシステムコールなので、異なるオペレーティング・システム・プラットフォームの下で実行されているAWTプログラムの同期間は、グラフィックスシステムは、Windowsの下で実行されている同じウィンドウではありません見てきたプラットフォームであり、例えば、Windowsスタイルのウィンドウを表示します;およびUNIX上で実行する場合、UNIXスタイルのウィンドウを表示します。
5.1.4のLayoutManagerレイアウトマネージャ(1)
Javaはクロスプラットフォームを実現し、動的効果のレイアウトを得るためには、Javaのような「レイアウトマネージャー」を管理するように構成された容器内の構成要素の全て:順序、ウィンドウが移動または後にサイズ変更される成分、位置、サイズどの成分が変化し、異なるレイアウトマネージャは異なるアルゴリズムおよび戦略を使用して管理するために、対応するコンテナレイアウトマネージャに委任他の機能、容器は、異なるレイアウトマネージャを選択してレイアウトを決定することができる。
レイアウトマネージャを含む:FlowLayoutの、BorderLayoutのをGridLayoutの、CardLayout、GridBagLayoutの
実施例5.3
java.awtのインポート* ;.
パブリッククラスExGui {
プライベートフレームF;
プライベートボタンB1、
専用ボタンB2;
文字列引数[]){主空隙パブリック静的
ExGuiその新しい新しいExGui =();
その.GO();
}
公共ボイドゴー(){
F =新たな新たなフレーム( "GUI例");
f.setLayout(FlowLayoutの新しい新しい());
//レイアウトマネージャはFlowLayoutのあるセット
B1は、新しいボタンが新しい=( "私を押して" );
//上の表示文字「を押しミー」ボタン
ボタン新しい新=のB2( "DO未プレスミー");
f.add(B1);
f.add(B2);
f.pack();
、すなわちのsetSize()、として機能//コンパクトな配置、窓いるので
ほんの小さなライブB1、B2つのボタン収容することができることが、できるだけ小さく
f.setVisible(trueにする);
}
}
実行結果表示
FlowLayoutの1
FlowLayoutのパネルを、アプレットのデフォルトのレイアウトマネージャコンポーネントは、法律から配置されています。底部に、容器が十分に広い場合、第一成分が左端の行に最初の容器に添加され、適切な場所に残され、順次、右側の成分のその後のアセンブリに追加され、現在の行より少ない置いた場合コンポーネントは、次の行の左側に配置されている。
主に以下のいくつかの方法構成される:
FlowLayoutの(FlowLayout.RIGHT、20,40)を;
/ *最初のパラメータは、コンポーネントの整列を示し、コンポーネントがこの行に位置を指しています詰めまたは右ランク左揃えを中心に、2番目のパラメータは構成要素間の横方向間隔は、第三のパラメータは、構成要素間の長手方向間隔は、画素単位* /。
FlowLayoutの(FlowLayout.LEFT);
// 5つの画素の左位置合わせ、横方向に離間し、長手方向に離間デフォルト値は
()FlowLayoutの;
//デフォルトの配向方向 中心に、横方向に離間し、縦方向に5つの画素のデフォルト値離間さ
例5.4
* java.awtのインポートに;.
パブリッククラスmyButtons {
公共の静的な無効メイン(文字列引数[])
{
フレームフレーム新しい新F =();
f.setLayout(FlowLayoutの新しい新しい());
ボタンのButton1ボタン新しい新=( "OK") ;
ボタン新しい新=( "オープン")ボタン2ボタン、
新しいボタン3新しいボタンがボタンを=( "閉じる");
f.add(ボタン1);
f.add(ボタン2);
f.add(ボタン3);
f.setSize(300、100) ;
; f.setVisible(真の)
}
}
の結果が実行見る
成分定数の大きさが、例の相対位置を変える:アセンブリと容器の大きさは、ばらつきがあるFlowLayoutの管理を、変更されたときに時間が変更されます。図が同じ行にある三つのボタンであるが、ウィンドウが狭くされている場合、単にボタンに絞り込むことは、第二の折り畳み線に第二ボタンは、第3ボタンは、第三の行を折るする。ボタン「開く」、右側に「OK」ボタンであったであろうが、そのようになりました、以下の入った「コンポーネントのサイズが変更されていないが、相対位置が変化します。」
2。 BorderLayout
BorderLayoutには、ウィンドウ、フレームダイアログで、デフォルトのレイアウトマネージャのレイアウトマネージャは、コンテナが5つの領域:.北、南、東、分割され.BorderLayout西、そしてセンター、各領域は、各領域の位置や大きさのコンポーネントを配置することができます以下に示すとおり
、実施例5.5に
インポートjava.awtで*;
publicクラスbuttonDir {
公共の静的な無効メイン(文字列引数[]){
フレームフレーム新しい新F =( "のBorderLayout");
f.setLayout(BorderLayoutの新しい新しいです())。
f.add(「北」、ボタン新新(「北」));
コンテナ北領域にボタンを追加する//最初のパラメータ
f.add(「南」、ボタン新新(「南」));
/ /最初のパラメータは、血管の南領域にボタンを追加する
f.add(「東」、ボタン新新(「東」));
//最初のパラメータは、コンテナ東領域にボタンを追加する
(f.add 「西」、ボタン新新(「西」));
//最初のパラメータは、血管の西領域にボタンを追加する
f.add(「センター」、 ボタン新しい新しい(「センター」));
//最初のパラメータは、コンテナ領域センターにボタンを追加します
f.setSize(200,200);
f.setVisibleが(trueに);
}
}
の演算結果を表示する
コンテナのサイズが変化している、変更された場合、のBorderLayoutを使用する場合:成分変化の相対位置を、例えば容器のサイズを変更します血管が広がった場合、西、東地域定数、北、中央、南のエリアを拡大し、必ずしも領域のすべてを持っていませんが、高い、北、南地域変わらず、西、中央、東地域が高いとなります。アセンブリは、周囲の地域(西、東、北、南領域)はセンター領域によって補完する要素を持たない場合は、しかし、中央領域がコンポーネントを持たない場合は、いくつかの図に示すよう、その結果、空のまま:
北地域不足しているコンポーネント
ノース・センター領域とアセンブリの欠如
3グリッドレイアウトの
格子レイアウトのような容器の種々の構成要素、容器の平均占有空間。
実施例5.6
java.awtのインポート* ;.
パブリッククラスButtonGrid {
公共の静的な無効メイン(文字列引数[]){
フレームF =新しい新しいフレーム( "グリッドレイアウト");
f.setLayout(新しい新規のGridLayout(3,2));
//コンテナが3行6個の細胞をf.add二つの列に分けた(新しいボタン( "1" )); / 最初の細胞/最初の行に追加
f.add(新しいボタン(「2」 )); // 次のフレームの最初の行に追加
f.add(新しいボタン(「3」 )); // 第2の行の最初のセルに追加
F。 (新しいボタン(「4」を追加 )); //は、 次の二行目のグリッドに追加
f.add(新しいボタン(「5」 )); //は、 3番目の列の最初のセルに追加
(f.add新しいボタン( "6")) ; // 第三の行の次のセルに追加
f.setSize(200,200);
f.setVisible(真の);
}
}
実行結果を参照
5.1.4のLayoutManagerレイアウトマネージャ(2)
4 。CardLayout
CardLayoutレイアウトマネージャは、ユーザが2つの対処またはそれ以上のメンバーが同一の表示領域を共有することができ、容器、その中に複数の層、放置容器が占める全体の表示空間の各サイズが、それぞれ一つだけのコンポーネント、もちろん、それぞれの層は、きちんと折り畳まカード、54枚のカードとしてのブランドのレイアウトマネージャ(CardLayout)のように。パネルを使用して、複雑なユーザインタフェースを実装することができますが、あなただけのカードの上部を見ることができます各カードは、各レイヤのカードレイアウトマネージャと同等である。
実施例5.7
インポートするjava.awt * ;.
インポートいるjava.awt.event * ;.コンテンツ//イベント処理メカニズムの次のセクション
パブリッククラスThreePages MousListを実装します ENER {
CardLayoutレイアウト=新しいCardLayout(); // カードレイアウトマネージャオブジェクトをインスタンス化し
、フレームフレーム新新F =(「CardLayout」)
ボタンのpage1Button;
ラベルpage2Labelを; //ラベルはラベル、実際には、彼の文字列
のTextArea page3Text。複数列の//複数行テキスト領域
、ボタンpage3Top
ボタンpage3Bottom、
パブリック静的な無効メイン(文字列引数[])
{新しい新しいThreePages()ゴー();.}
公共ボイドゴー()
{f.setLayout(レイアウト); / /カードレイアウトのレイアウトマネージャを設定し
f.add(=新しい新page1Buttonボタン(「ボタンPage」)、「page1Buttonは」); / *第二引数「page1Buttonは」*あなたは、このレイヤ名を取っブランドを表し/
page1Button.addMouseListener(この); //登録リスナー
f.add(=新しい新page2Labelラベル( "ラベル・ページ")、 "page2Label");
page2Label.addMouseLisener(この); //リスナー登録
パネルパネル=新しいパネルを();
panel.setLayout(BorderLayoutの新新());
panel.add(TextAreaの新しい新=( "コンポジットページ")、 "センター" page3Text);
page3Text.addMouseListener(この);
panel.add(page3Topボタン新しい新=( "トップボタン" )、 "北");
page3Top.addMouseListener(この);
panel.add(page3Bottomボタン新しい新=( "下ボタン")、 "南");
page3Bottom.addMouseListener(この);
f.add(パネル、 "パネル" );
f.setSize(200,200);
()をtrueにf.setVisible;
}
HH
}
5.ネストコンテナ
管理するレイアウトを容易にするために、複雑なグラフィカル・ユーザ・インタフェースの設計では、単純な全体的なスタイルで、A含有自身容器アセンブリ複数の別の容器に添加される成分として使用され、その後、このようにネストされたコンテナを形成し、コンテナ船を追加することができる。以下は、ネストされたコンテナの一例である。
実施例5.8
java.awtのインポート。 *;
パブリッククラスExGui3 {
プライベートフレームF;
プライベートパネルP;
プライベートボタンの体重、BC;
プライベートボタンBFILE、bhelp。
公共の静的な無効メイン(文字列引数[])
{
ExGui3のGUI =新しいExGui3()。
gui.go();
}
公共ボイドゴー(){
F =新しいフレーム( "GUI例3")。
BW =新しいボタン( "西");
BC =新しいボタン(「ワークスペース領域」)。
f.add(BW、 "西");
f.add(BC、 "センター")。
P =新しいパネル();
f.add(P、 "北");
BFILE =新しいボタン( "ファイル");
bhelp =新しいボタン(「ヘルプ」)。
p.add(BFILE)。
p.add(bhelp)。
f.pack();
f.setVisible(真の);




1.Frameは、トップレベルウィンドウ.FrameデフォルトのレイアウトマネージャはBorderLayoutですある。
2.Panelコンテナに追加する必要があり、別々に示されていない。パネルのデフォルトのレイアウトマネージャはFlowLayoutのである。
3.場合のパネルコンポーネントは、それ自身の静止パネルのレイアウトマネージャを有することができる容器に添加された後。したがって、我々は高度なユーザインタフェースを実現するために設計された領域のディスプレイアセンブリの複数を、BorderLayoutのパネルを使用することができる。
4.ないレイアウトの場合マネージャーsetLayoutの(ヌル)は、手動でコンポーネントを設定するためのsetLocation()、サイズと位置のsetSize()、setBounds()メソッドを使用する必要があり、プラットフォーム依存で、このメソッドの結果は、使用を奨励しません。
5.2 AWTイベントモデルの取り扱い
に1つずつ主なコンテンツは、さまざまなコンポーネントを配置する方法を、グラフィカルなインターフェイスは、よりカラフルであるが、それは、グラフィカルインタフェースは、ユーザの操作を受けて作ることができるように、ユーザーが任意の操作に応答しない、個々のコンポーネントのイベント処理メカニズムを追加する必要があります。イベントで:処理中に、主にオブジェクトの三種類に関連する
ようなキーとしてEvent-イベント、ユーザーインターフェース操作はクラスの形で、Java言語で記述されています 操作に対応するイベントクラスがたKeyEventある。
イベントソース-イベントソース、イベント発生場所、ボタンなどの通常の個々の成分は、ボタン。
そのターゲット・オブジェクトにイベントを受信して処理するイベントhandler-イベントハンドラ
、例えば、ユーザもしボタンオブジェクト]ボタンをクリックし、ボタンは、ボタンのイベントソースですが、JavaランタイムシステムはオブジェクトのactionEのActionEventクラスを生成します、オブジェクトは、クリックイベントで、イベントハンドラオブジェクトの情報の一部を説明しましたJavaはオブジェクトactionEイベントと対応する処理上を通過するように受信システムによって実行されます。
同じイベントソースで発生する可能性があり、様々なイベントのために、Javaは、認可処理機構(委任モデル)、イベントソースは、キャンバスなどに対処するためのさまざまなイベントハンドラにライセンスされて発生する可能性があります場合には、自身のすべてを置くことができますを採用しました両方のマウスイベントのオブジェクト発生する可能性があり、キーボードイベントも発生することが、Canvasオブジェクトは、次の2つの主要なイベントに対処するためのイベントハンドラに許可を与える、マウスイベントを処理するイベントハンドラに委任することができます。時々 、イベントハンドラと呼ばれますリスナーが、また、主な理由そのイベントが処理許可モデルを外部に委託するイベントを処理するや否や、イベントの種類に対処するための独自のタイプと一致していると、イベントソースで発生したイベントのすべてのタイプのリスニングのリスナー処理のための処理エンティティは、分離イベントソースとリスナーのためのメカニズムを実装しました。イベントハンドラ(リスナー)は通常クラスであるあなたが特定の種類のイベントを処理できるようにしたい場合、イベントの反対の種類を達成するために必要ですそれが実現するため、インターフェイスタイプは、例えば、実施例5.9でのActionEvent ButtonHandlerを処理することができました インタフェース対応のActionListenerのActionEventイベント。各クラスは、関連するイベント対応インターフェイス有する
図5.2に示すように、イベントソースオブジェクトとイベントハンドラ(イベントリスナー)が分離されている
不適切な類推を行います、一つは、李氏は、李氏は、多くの法的紛争は、おそらく民事法的紛争、それは、犯罪の法的紛争かもしれリーは弁護士を雇うことができますので、彼がいる間、彼は民法で訴訟を闘うために王の担当弁護士を許可することができるが起こるかもしれ語りますあなたはまた、彼らが持っている、一度認可、ビューのミスター・リーのポイントから弁護士を雇うためのプロセスは、認可プロセスである。彼は訴訟の刑法と闘うために張氏を承認、およびビューの王氏と張氏の視点からも李氏はリーで、民事紛争後、王はすぐに弁護士が対処するだろうが、犯罪者紛争後、張氏はすぐに処理されます「リスニング」、時間を担当しています。この時点で、リーはイベントですソースは、王氏は、イベントハンドラで、張氏は、別のイベントハンドラ、民事紛争や犯罪者の紛争のイベントの異なるタイプのものです。

ます。https://www.cnblogs.com/521taobao/archive/2012/03/17/2402467.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33850015/article/details/93355896