[戻る]

41---ボーダー(Border:国境、境界)レイアウトの設定

// java.awt.Container.setLayoutで、addで追加する部品の配置(レイアウト)方法を指定できる。
//なお、フレーム(Frameクラスの画面)のデフォルトがBorderになっている。

/* 
   */

import java.awt.*;
import java.applet.*;

public class applet41 extends Applet {
	public void init() {
		setBackground(new Color(100,100,200));
		setLayout(new BorderLayout()); // 引数でFlowLayout.RIGHTをと指定すると部品が右へ寄る
		add(new Button("button1"),BorderLayout.NORTH);	//北(上)
		add(new Button("button2"),BorderLayout.WEST);	//西(左)
		add(new Button("button3"),BorderLayout.CENTER);	//中央
		add(new Button("button4"),BorderLayout.EAST);	//東(右)
		add(new Button("button5"),BorderLayout.SOUTH);	//南(下)
	}
}

// 全ての追加でadd(new Button("○×△")); とした場合、最後に追加した部品しか見えなくなってしまう。
// addの第二引数を省略した場合、CENTERに追加することになり、1つの境内で1つの部品しか見えないレイアウトだからである。

[戻る]

42---フロウ(Flow:注ぐ,流れる)レイアウト(配置)の設定

//アプレット(親クラスのパネルの設定)のデフォルトがFlowになっている。

/* 
   */

import java.awt.*;
import java.applet.*;

public class applet42 extends Applet {
	public void init() {
		setBackground(new Color(100,100,200));
		setLayout(new FlowLayout(FlowLayout.RIGHT)); // FlowLayout.LEFT と指定すると部品が左寄せされる
		add(new Button("button1"));
		add(new Button("button2"));
		add(new Button("button3"));
		add(new Button("button4"));
		add(new Button("button5"));
	}
}

[戻る]

f42---applet42をFrame(ブラウザで実行するアプレットでない)作品に変更する。

/*
    
    
   */
//FrameクラスのデフォルトがBorderになっているのでFlowに変更
import java.awt.*;
import java.awt.event.*;
public class frame42 extends Frame implements ActionListener {
	Button btn;
	public static void main(String argv[]){
		frame42 p = new frame42();
		p.init();	//アプレットのように自動実行するものでなく、単なるメソッドなので呼び出し記述が必要
		p.setSize(250,100);//サイズ変更
		p.show();	//表示
	}

	public void init() {
		setBackground(new Color(100,100,200));
		setLayout(new FlowLayout());//レイアウト変更
		add(new Button("button1"));
		add(new Button("button2"));
		add(new Button("button3"));
		add(new Button("button4"));
		add(btn = new Button("終わり"));
		btn.addActionListener(this);
	}
	public void actionPerformed(ActionEvent e){
		this.dispose();//破棄
		System.exit(0);//終了
	}
}

[戻る]

f422---レイアウト無し(setLayout(null))で、setBoundsにより位置とサイズを指定

/*
    
    
   */
//レイアウト無し(setLayout(null))で、setBoundsにより位置とサイズを指定

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

public class frame422 extends Frame  implements WindowListener{
	Button btn;
	public static void main(String argv[]){
		frame422 p = new frame422();
		p.init();	//アプレットのように自動実行するものでなく、単なるメソッドなので呼び出し記述が必要
		p.setSize(250,200);//サイズ変更
		p.show();	//表示
		p.addWindowListener(p);
	}

	public void init() {
		setBackground(new Color(100,100,200));
		setLayout(null);//レイアウト無し 
		add(btn = new Button("button1"));
		btn.setBounds(10,10,70,30);//左上端の座標と、幅と高さ。レイアウト無しでは幅高さがないと0になることに注意
		add(btn = new Button("button2"));
		btn.setBounds(60,50,70,30);
		add(btn = new Button("button3"));
		btn.setBounds(110,90,70,30);
		add(btn = new Button("button4"));
		btn.setBounds(160,130,70,30);
		add(btn = new Button("button5"));
		btn.setBounds(210,170,70,30);
	}
	public void windowOpened(WindowEvent e) {	//ウィンドウが最初に可視になった
		System.err.println("windowOpened");
	}
	
	public void windowClosed(WindowEvent e) { //ウィンドウがクローズされた
		System.err.println("windowClosed");
	}
	
	public void windowClosing(WindowEvent e) {//ユーザが、ステムメニュー(クローズボックスなど)でウィンドウを閉じた 
		System.err.println("windowClosed");
		this.dispose();	//すべてのネイティブスクリーンリソースを解放(ウインドウが無くなる)
		System.exit(0);//仮想マシンを終了
	}
	public void windowIconified(WindowEvent e) {//ウィンドウが最小化された
		System.err.println("windowIconified");
	}
	public void windowDeiconified(WindowEvent e) {//他の状態から通常の状態になった
		System.err.println("windowDeiconified");
	}
	public void windowActivated(WindowEvent e) {//Window がアクティブ化 
		System.err.println("windowActivated");
	}
	public void windowDeactivated(WindowEvent e) { //Window がアクティブでなくなった 
		System.err.println("windowDeactivated");
	}

}




[戻る]

43---GridLayoutの確認→3×2の升目で配置している。

import java.awt.*;
import java.applet.*;

/* 
  */

public class applet43 extends Applet {
	public void init() {
		setBackground(new Color(100,100,200));
		setLayout(layout = new GridLayout(3,2)); // 3行,2列
		layout.setVgap(5);
		layout.setHgap(5);
		add(new Button("button1"));
		add(new Button("button2"));
		add(new Button("button3"));
		add(new Button("button4"));
		add(new Button("button5"));
	}
}


[戻る]

44---少しだけ柔軟なレイアウトを可能とするGridBagLayoutの確認

import java.awt.*;
import java.applet.*;

/* 
  */

class MyGridBagLayout extends GridBagLayout {//GridBagLayout派生の自作クラスを作った方がシンプルになる?
	Container it = null; //Window,Panel,Frame,Appletなどの対象
	GridBagConstraints constraints;//制約に使うオブジェクト
	MyGridBagLayout(Container that){
		it = that;
		constraints = new GridBagConstraints();
		it.setLayout(this);
		constraints.weightx = 1.0;//余分の水平スペースを分配
		constraints.weighty = 1.0;//余分の垂直スペースを分配
		constraints.fill = GridBagConstraints.BOTH;//縦横、両方を満たすように配置する制約
	}
	void add(Component obj,int w, int h){//ボタンなどのコンポーネントを追加
		constraints.gridwidth = w;	//コンポーネントの表示領域の1行のセル数
		constraints.gridheight = h;	//コンポーネントの表示領域の1列のセル数
		this.setConstraints(obj, constraints);//現在の制約を使い
		it.add(obj);
	}
}

public class applet44 extends Applet {
	public void init() {
		MyGridBagLayout layout = new MyGridBagLayout(this);
		setBackground(new Color(100,100,200));
		layout.add(new Button("11"),1,1);
		layout.add(new Button("12"),1,1);
		layout.add(new Button("13"),1,1);
		layout.add(new Button("14"),GridBagConstraints.REMAINDER,1);//この設定でこの行が終了
		layout.add(new Button("2"),3,2);//この設定でこの行が終了
		layout.add(new Button("21"),GridBagConstraints.REMAINDER,1);//この設定でこの行が終了
		layout.add(new Button("22"),GridBagConstraints.REMAINDER,1);//この設定でこの行が終了
		layout.add(new Button("3"),1,4);
		layout.add(new Button("31"),GridBagConstraints.REMAINDER,1);//この設定でこの行が終了
		layout.add(new Button("32"),GridBagConstraints.REMAINDER,1);//この設定でこの行が終了
		layout.add(new Button("33"),1,2);//この設定でこの行が終了
		layout.add(new Button("331"),GridBagConstraints.REMAINDER,1);//この設定でこの行が終了
		layout.add(new Button("332"),GridBagConstraints.REMAINDER,1);//この設定でこの行が終了
	}
}

[戻る]

45---狭いスペースを切り替えて使うCardLayoutの確認

import java.awt.*;
import java.applet.*;
import java.awt.event.*; //ItemListener利用のため

/* 
  */

public class applet45 extends Applet implements ItemListener {
	Panel card; //CardLayoutを設定する中央配置のパネル
	CardLayout cardLayout;	//カードレイアウト記憶用
	Checkbox ck1,ck2;
	Button btn = new Button("テスト用ボタン");
	TextArea txt = new TextArea("テストとしての内容");
	public void init() {
		setBackground(new Color(200,200,255));
		setLayout(new BorderLayout());
		Panel north = new Panel();
		add(north,BorderLayout.NORTH);	//北(上)
		CheckboxGroup cg = new CheckboxGroup();	//グループ化用オブジェクト生成
		north.add(ck1 = new Checkbox("ボタン選択",cg, true));
		north.add(ck2 = new Checkbox("テキスト選択",cg, false));
		
		card = new Panel();
		add(card,BorderLayout.CENTER);//中央
		
		card.setLayout(cardLayout = new CardLayout());//★★★ CardLayoutを設定
		card.add(btn,"ボタン");		//Containerクラスに対するadd命令(末尾に追加)で、レイアウトマネージャに通知されることになる。
		card.add(txt,"テキストエリア");
		ck1.addItemListener(this);
		ck2.addItemListener(this);
	}
	
	public void itemStateChanged(java.awt.event.ItemEvent e){
		Object obj = e.getSource();	//イベント発生オブジェクト取得
		if (obj == ck1){
			cardLayout.show(card,"ボタン");
		} else if(obj == ck2){
			cardLayout.show(card,"テキストエリア");
		}
	}
}


[戻る]

f46---FrameにScrollPaneを作り、そこで指定の画像をスクロールする

/*
    
    
   */
//指定の画像を、ScrollPane に貼り付ける。
//画像読み込み終了を待つ処理を含む

import java.awt.*;
import java.applet.*;
import java.awt.event.*; //WindowEvent利用のため

public class frame46 extends Frame  {
	Image img = null;
	public static void main(String argv[]){
		frame46 p = new frame46();
		p.init();
		p.setSize(100,100);//サイズ変更
		p.show();	//表示
	}

	public void init() {
		this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				dispose();//破棄
				System.exit(0);
			}
		});
		
		//画像読み取り処理
		Toolkit toolkit = this.getToolkit();//Windowが管理している
		java.net.URL url = getClass().getResource("heno.jpg");
		img = toolkit.getImage(url);
		MediaTracker tracker = new MediaTracker(this);//イメージの呼び出しを監視
		tracker.addImage(img,0);//監視リストに追加
		for(;;){
			try {
				tracker.waitForID(0);//イメージ読み込みが完了するまでまつ。
				break;
			}
			catch(InterruptedException ie){//別のスレッドがこのスレッドに割り込んだ場合
				continue;
			}
			catch(Exception e){
				img = null;
				break;
			}
		}
		
		//スクロールペイン作成
		ScrollPane scrPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); //常にスクロールバー表示
		this.add(scrPane);//このフレームへスクロールペインを追加
		scrPane.add( new Canvas() {	//キャンバス派生クラスの生成し、スクロールペインへ追加
			{	//インスタンス初期化子を利用した初期化
				if(img != null){
					int w = img.getWidth(this);
					int h = img.getHeight(this);
					this.setSize(w,h);
				}
			}
			public void paint(Graphics g) {//Canvasの
				if(img != null){
					g.drawImage(img, 0, 0, this);//画像を表示
				}
			}
		});
	}
}


[戻る]

---

---
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送