ダークホースプログラマーJavaベース-->GUI(グラフィカルユーザーインターフェース)

13258 ワード

------------android教育
、javaトレーニング
java学習型技術ブログ、交流を期待しています。
第1節  GUI概要
一、概要:
1、GUI:Graphcal User Interface、すなわちグラフィカルユーザーインターフェースは、コンピュータとユーザとの対話のための一つの方法である。
2、コンピュータとユーザーのインタラクションの形式:GUIとCLI
      GUI:Graphcal User Interface、グラフィカルユーザーインターフェースは、コンピュータの操作インターフェースをグラフィックスで表示し、直感的に便利です。
      CLI:Command Line User Interface、コマンドラインユーザーインターフェース、いわゆる一般的なDosコマンドライン操作は、いくつかのコマンドを覚えておく必要がありますが、直感的ではありません。
3、javaもこのようなインターフェースを対象にカプセル化して、その中の対象は全部二つのカバンの中に置いています。java.Awtカバンとjavax.Swingバッグ。
java.Awt包:Abstract Window Toolkit、つまり抽象的な窓のツールボックスです。ローカルシステムの方法を呼び出して機能を実現するには、ヘビー級コントロールに属します。
javax.Swingパッケージ:AWTベースで構築されたグラフィカルインターフェースシステムのセットは、より多くのコンポーネントを提供し、Javaの実装が完全にあり、移植性を強化し、ライト級コントロールに属します。
二、継承体系:
Continerはコンテナで、add方法でコンポーネントを追加します。
三、レイアウトマネージャ:
1、レイアウト:容器のセットの配置方式
2、よくあるレイアウトマネージャ:
1)Flow Layout:フローレイアウトマネージャは、左から右に並べば、Panelのデフォルトのレイアウトマネージャです。
2)Border Layout:境界式レイアウトマネージャ、東南西北における配置方式は、Frameのデフォルトレイアウトマネージャです。
3)Gride Layout:ネットフォーマットのレイアウトマネージャ、規則の行列
4)Card Layout:カード式レイアウトマネージャ、すなわちタブ
5)GridBayLayout:グリッドパッケージレイアウトマネージャ、非規則行列
3、複数のレイアウトがある場合、フォームインターフェースはどうやって作成されますか?ステップ:
1)まずフォームFrameを大領域に分割し、そのレイアウトマネージャを設定し、パネルPanelに加入する。
2)パネルに追加したレイアウトマネージャを構築します。
例:
import java.awt.*;
import java.awt.event.*;

class FrameDemo{
	//             
	private Frame f;
	private Button but;
	FrameDemo(){
		init();
	}
	//     
	public void init(){
		// frame      
		f = new Frame("my frame");
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());

		but = new Button("button");
		//        
		f.add(but);
		//         
		myEvent();
		//    
		f.setVisible(true);
	}
	//    
	private void myEvent(){
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
		}});
		//            
		but.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.out.println("button      ");
				System.exit(0);
		}});
	}
	public static void main(String[] args) 
	{
		new FrameDemo();
	}
}
四、図形化画面の構想を作成する:
1、Frame容器を作成する:Frame f=new Frame(「my Frame」);タイトルの設定ができます
2、フォームを設定します。サイズ、位置、レイアウトなど。
      f.set Size(int wight、int hight)
      f.set Location(int x,int y)を設定し、縦軸を設定する。
      f.set Bounds(int wight,int hight,int x,int y)は、直接これを使ってサイズと位置を設定します。
      f.set Layout(Layout layout)は、Flow Layoutのような指定されたレイアウトマネージャです。
3、コンポーネントを定義する:Button b=new Button(「Button」)のように、コンポーネントの名前を設定することができます。
4、フォームのadd方法によってコンポーネントをフォームに追加し、f.add(b);
5、フォームを表示させ、setVisibleを通じて、パラメータがtrueかfalseかを設定することによってフォームが表示されるかどうか
五、事件の傍受メカニズム
一)の特徴:
1、イベントソース(コンポーネント):awtまたはswingパッケージの中のそれらのグラフィックインターフェースコンポーネント
2、イベント(Event):それぞれのイベントソースには自分特有の対応時間と共通性があります。
3、モニター(Listener):あるイベントをトリガする動作(一つ以上)をモニターに封入する。注意してください。動作はモニターに実装されます。
4、事件処理:事件発生後の処理方式。
二)説明:
最初の三つはjavaで定義されています。直接にそのオブジェクトを取得して使えばいいです。私たちが必要なのは、発生した動作を処理することです。
1、モニターを明確にして上に登録し、方法:addWindowListener(WindowListener w)
2、注意:サブクラスでWindowListenerインターフェースを実現するには、7つの方法をカバーする必要があります。その中にあるクローズ動作だけで使用できます。他の動作は使用していないので、すべてを書き直さなければなりません。WindowListerのサブクラスWindowAdapterがこのインターフェースを実現し、その中のすべての方法をカバーしているので、WindowAdapterを継承し、必要な方法をカバーしてください。
3、事件を明確にして、事件を処理しますが、実際には、どのようなモニターを追加すれば、どのようなイベントが追加されますか?
例1:マウスとキーボードのイベント
import java.awt.*;
import java.awt.event.*;
class MouseAndKeyEvent
{
	//      
	private Frame f = null;
	private Button but = null;
	private TextField tf;
	//     
	MouseAndKeyEvent(){
		init();
	}
	//    
	public void init(){
		f = new Frame("my frame");
		f.setBounds(300,200,600,500);
		f.setLayout(new FlowLayout());
		tf = new TextField(20);
		but = new Button("button");
		f.add(tf);
		f.add(but);
		myEvent();
		f.setVisible(true);
	}
	//    
	private void myEvent(){
		//     ,      
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
		}});
		// but         
		but.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.out.println("action ok");
		}});
		//           ,      
		tf.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				int code = e.getKeyCode();
				System.out.println(e.getKeyChar() + "..." + e.getKeyChar());
				if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9)){
					e.consume();
					System.out.println(code + "    ");
		}});

		//    
		//myMouseEvent();
		//    
		myKeyEvent();
	}
	//    
	public void myMouseEvent(){
		// but         
		but.addMouseListener(new MouseAdapter(){
			private int count = 1;
			private int clickCount = 1;
			private int clickCount2 = 1;
			public void mouseEntered(MouseEvent e){
				System.out.println("       " + count++);
			}
			public void mouseClicked(MouseEvent e){
				if(e.getClickCount()==2)
					System.out.println("    "  + clickCount2++);
					//System.out.println("    " + clickCount++);
		}});
	}
	//    
	public void myKeyEvent(){
		// but         
		but.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e)
			{
				//   ctrl         
				if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
					System.out.println("ctrl+enter is runing");
				//System.out.println(e.getKeyChar() + "..." + e.getKeyCode());
				//System.out.println(KeyEvent.getKeyText(e.getKeyCode()) + "..." + e.getKeyChar());
			}
		});
	}

	public static void main(String[] args) 
	{
		new MouseAndKeyEvent();
	}
}
 
 
第二節   適用
一、ダイアログ:Dialog
1、いつダイアログが必要ですか?このオブジェクトは呼び出し時にオブジェクトを作成する必要があります。例えば、誤操作時にエラーメッセージを示すダイアログが表示されます。このオブジェクトは作成されます。
二、メニュー:Menu
1、Menu:メニュー、Menu exteds MenuItem;右三角形のアイコンがあります。MenuとMenuItemを追加できます。
2、MenuBar:メニューバーにメニューと項目を追加できます。
3、MenuItem:項目とメニュー項目、右三角形のアイコンがないと存在します。最終メニュー項目です。
4、メニューのイベント処理はコンポーネントと同じで、MenuItemとMenuのタイプのオブジェクトというイベントソースにイベントモニターActionistenerを追加し、関連するイベント処理を行うことができます。
例:
三、jarパッケージをダブルクリックして実行します。
グラフィカルインターフェースである以上、Dosコマンドラインではなくグラフィックインターフェースでプログラムを実行する必要がありますが、どうやってプログラムをダブルクリックして実行しますか?これはプログラムのクラスファイルを梱包する必要があります。手順は以下の通りです。
1、まずjavaファイルにカバンを導入します。ない場合は、package mymenuのようなパッケージを作成する必要があります。
2、作成パッケージ:javac-d c:\myclass MyMenu.javaをコンパイルすることによって、この時はc盤下のmyclassフォルダの下ですべてのファイルを生成しました。classファイル
3、このディレクトリの下に新しいファイルを作成します。例えば、1.txtまたは他の任意の名前の拡張子のファイルでもいいです。その中で固定されたフォーマットを編集します。「Main-Colass:mymenu.MenuDemo」は引用符の内容だけを書きます。コロンの後にスペースが必要です。書類の最後に車を返します。
4、コンパイル:jar-cvfm my.jar 1.txt mymenuで結構です。他の情報を追加したいなら、jarを直接コンパイルしてコマンドを作成できます。
5、この場合はダブルクリックで実行できます。
説明:
1)固定フォーマットでは、
a.スペースがない場合:コンパイル時にIO異常を報告し、無効なヘッダフィールド、すなわちinvalid header fieldを提示する。これは、1.txtがIOストリームに読み取られていることを示している。
b.返却がない場合:リストリストリスト.MFに主カテゴリをロードする情報が追加されません。つまり、配置リストの属性マスタ名はリストにロードされません。実行されません。
2)jarファイルはシステムに登録しなければ実行できません。登録方法は以下の通りです。
A.XPシステムについて:
   a.任意のダイアログを開き、メニューバーでツールボタンをクリックし、フォルダオプションを選択します。
   b.新規作成-->拡張子を選択して、拡張子をjarに設定し、決定する。
   c.高級なアイコンを選択し、新しいアイコンをクリックして、openと命名します。
   d.実行可能なアプリケーションにおいて、ポイントブラウズは、jdkの下のbinのファイルパス全体を追加し、パスの後に-jarを追加すれば良い。
B.win 7システムについて:
   a.開け方を変える:右クリック.jarファイル、開け方をクリックして、デフォルトのプログラムをjdkの下でbinの中のjavaw.exeアプリケーションとして選択する。
   b.関連プログラムのレジストリを修正する:レジストリ(win+r)を開け、レジストリの経路\HKEY_を見つけるCLASSES_ROOT\Applications\javaw.exe\shell\open\commandの文字列の値を右クリックして修正しました。値を「C:\Program Files\Java\jre 6\javaw.exe」-jar'%1のうち、jar前の経路はjavaw.exeの経路です。保存
   c.ダブルクリックしてjarプログラムを実行できます。まだ実行できないなら、最新版のjdkをダウンロードします。
例1:
指定されたディレクトリの項目を開く
import java.awt.*;
import java.awt.event.*;
import java.io.*;

class  MyWindowDemo
{
	//      
	private Frame f;
	private Button but;
	private TextField tf;
	private TextArea ta;

	private Dialog d;
	private Label lab;
	private Button okBut;

	//    ,     
	MyWindowDemo()
	{
		init();
	}
	//       ,        
	public void init()
	{
		//    
		f = new Frame("my window");
		f.setBounds(300,200,600,500);
		f.setLayout(new FlowLayout());
		//    
		but = new Button("  ");
		tf = new TextField(60);
		ta = new TextArea(25,75);

		d = new Dialog(f,"    -self",true);
		d.setBounds(300,100,300,150);
		d.setLayout(new FlowLayout());
		lab = new Label();
		okBut = new Button("  ");

		//        
		f.add(tf);
		f.add(but);
		f.add(ta);
		
		d.add(lab);
		d.add(okBut);

		//    
		myEvent();
		//      
		f.setVisible(true);
	}
	//       
	private void myEvent()
	{
		// but         
		but.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				showInfo();
			}
		});
		okBut.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				d.setVisible(false);
			}
		});
		//          
		tf.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				if(e.getKeyCode()==KeyEvent.VK_ENTER)
					showInfo();
			}
		});
		//      
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		//           ,       
		d.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				d.setVisible(false);
			}
		});
	}
	//    ,         
	private void showInfo()
	{
		String dirPath = tf.getText();
		File file = new File(dirPath);
		if(file.exists()&&file.isDirectory())
		{
			ta.setText("");
			String[] names = file.list();
			for(String name : names)
			{
				ta.append(name + "\r
"); } } else { String info = " :“"+dirPath+"” , "; lab.setText(info); d.setVisible(true); } } public static void main(String[] args) { new MyWindowDemo(); } }
例2:
ファイルを開いてテキストボックスに表示し、テキストボックスに書き込まれた内容を保存します。
/*
    

*/
package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MenuDemo 
{
	//      
	private Frame f;
	private MenuBar bar;
	private TextArea ta;
	private Menu fileMenu;
	private MenuItem closeMT,submu,openItem,saveItem;

	private FileDialog openDia,saveDia;

	private File file;
	
	//      
	MenuDemo()
	{
		init();
	}
	//        
	public void init()
	{
		//     frame
		f = new Frame("my Menu");
		f.setBounds(300,100,600,500);
		
		//      
		bar = new MenuBar();
		ta = new TextArea();
		fileMenu = new Menu("  ");
		submu = new MenuItem("   ");
		openItem = new MenuItem("  ");
		saveItem = new MenuItem("  ");
		closeMT = new MenuItem("  ");
		
		//                 
		fileMenu.add(submu);
		fileMenu.add(openItem);
		fileMenu.add(saveItem);
		bar.add(fileMenu);
		f.setMenuBar(bar);
		fileMenu.add(closeMT);

		openDia = new FileDialog(f,"    ",FileDialog.LOAD);
		saveDia = new FileDialog(f,"    ",FileDialog.SAVE);
		
		f.add(ta);
		//    
		myEvent();
		//       
		f.setVisible(true);
	}
	
	//    
	private void myEvent()
	{
		//      ,    
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		//           ,    
		closeMT.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
		//            ,    
		//    
		openItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				//     ,           
				openDia.setVisible(true);
				String dirPath = openDia.getDirectory();
				String fileName = openDia.getFile();
				//           
				if(dirPath==null || fileName==null)
					return ;
				//                 
				ta.setText("");
				file = new File(dirPath,fileName);
				BufferedReader bufr = null;
				try
				{
					//        
					bufr = new BufferedReader(new FileReader(file));
					String line = null;
					while((line=bufr.readLine())!=null)
					{
						ta.append(line+"\r
"); } } catch (IOException ex) { throw new RuntimeException(" "); } finally { try { if(bufr!=null) bufr.close(); } catch (IOException ex) { throw new RuntimeException(" "); } } } }); // saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(file==null) { // , saveDia.setVisible(true); String dirPath = saveDia.getDirectory(); String fileName = saveDia.getFile(); if(dirPath==null || fileName==null) return ; file = new File(dirPath,fileName); BufferedWriter bufw = null; try { // bufw = new BufferedWriter(new FileWriter(file)); String text = ta.getText(); bufw.write(text); bufw.flush(); } catch (IOException ex) { throw new RuntimeException(" "); } finally { try { if(bufw!=null) bufw.close(); } catch (IOException ex) { throw new RuntimeException(" "); } } } } }); } public static void main(String[] args) { new MenuDemo(); } }