[戻る]
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);//画像を表示
}
}
});
}
}
[戻る]
---
---