• 検索結果がありません。

Java言語 第1回

N/A
N/A
Protected

Academic year: 2021

シェア "Java言語 第1回"

Copied!
16
0
0

読み込み中.... (全文を見る)

全文

(1)

Java言語

第10回 ウインドウ型アプリケーション(1)

知的情報システム工学科

久保川 淳司

(2)

前回の課題

(1)

†

ボーダーレイアウト,グリッドレイアウト,パネルを使用して,電

卓風のボタンを実現する。

„

BorderLayoutでNORTH, CENTER, SOUTHに分割

„

NORTHにはテキストフィールドを設定

„

CENTERにはパネルを使って9つのボタンを設定

„

Sourthにはパネルを使って2つのボタンを設定

„

0~9のボタンで数字が入力され,Clearボタンで表示がクリアさ

(3)

課題

(2)

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

import java.awt.event.*;

/* <APPLET CODE="JaPanelKadai.class" WIDTH=200 HEIGHT=120> </APPLET> */ public class JaPanelKadai extends Applet implements ActionListener {

Button bt0, bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, btClr; TextField txt1;

String ss = "";

public void init() {

// BorderLayoutを設定しNORTH,CENTER,SOUTHだけを使う // NORTHにテキストフィールドを設定する // CENTERにパネルを設定し内部を3行3列のGridLayoutにする // p_center.setLayout(new GridLayout(3, 3)); ← パネルのレイアウト設定 // 1~9のボタンを設定 // 1~9のボタンをリスナ登録

add(p_center, BorderLayout.CENTER); // CENTERに登録

// SOUTHにパネルを設定し内部を1行2列のGridLayoutにする

// p_center.setLayout(new GridLayout(1, 2); ← パネルのレイアウト設定 // 0, Clearボタンを設定

// 0, Clearボタンをリスナ登録

add(p_south, BorderLayout.SOUTH); // SOUTHに登録 }

public void actionPerformed(ActionEvent e) { // ボタンクリック処理 Button btn = (Button)e.getSource();

if (btn == btClr) {ss = "";} else {ss = ss + btn.getLabel();} update(this.getGraphics());

}

public void paint(Graphics g) { // 表示する txt1.setText(ss);

} }

(4)
(5)

ウインドウ型アプリケーションの基礎知識

(1)

†

ウインドウ型アプリケーション

„

Windows上の一般的なアプリケーション形式

„

Webブラウザやappletviewerを使わなくても,そのプログ

ラム単独で動作させることができる

(ただし,JVMは必要)。

†

Javaアプレットとの違い

„

Javaアプレットはネットワーク上で動くことを前提としている

ため,セキュリティの観点から「

Sandbox

(砂場)」と呼ばれ

る保護された領域内でプログラムを動作させるため,ローカ

ルファイルへのアクセスが制限されている。

„

ウインドウ型アプリケーションは

JVM(Java仮想マシン)上

で動くのは同じであるが,通常のアプリケーションと同じよう

にローカルファイルへの入出力などの操作が可能である。

(6)

ウインドウ型アプリケーションの基礎知識

(2)

†

基本構成

„

Javaアプレットの時には

Appletクラス

を継承したクラスを

作成していたが,ウインドウ型アプリケーションでは

Frame

クラス

を継承してクラスを作成する。

„

表示させる窓のサイズは以下のように設定する。

„

(注)アプレットでの窓のサイズは,HTMLで記述していた。

/* <APPLET CODE="JaPanelKadai.class"

WIDTH=200 HEIGHT=120

> </APPLET> */

class MyPrg extends

Frame

{

...

}

xxx.setSize(横サイズ, 縦サイズ);

(7)

ウインドウ型アプリケーションの基礎知識

(3)

†

窓への描画

„

窓への描画はこれまでのアプレットとほとんど同じ方法

(paintメソッド)で実現できる。

†

部品の配置

„

Frameでは

デフォルトで

BorderLayout

が用いられる

(AppletのデフォルトはFlowLayout)。

„

Appletの時と同様に,自由にレイアウトを変更することが

できる。また,

Panelも使用することができる。

public void

paint

(Graphics g) {

g.drawString(....);

g.drawOval(....);

....

(8)

ウインドウ型アプリケーションの基礎知識

(4)

†

イベント処理,部品の処理

„

マウスクリックなどに対応するイベント処理やボタンの処理等は

Appletの場合と同じ。

†

タイトル文字

†

背景色の設定

†

窓の表示

†

窓を閉じる

setTitle("Myアプリケーション"); // タイトル文字列 setBackground(Color.yellow); // 背景を黄色にする xxx.setVisible(true); // フレームを表示する xxx.setVisible(false); // フレームを非表示にする addWindowListener(new WindowAdapter() { //閉じるボタンが押された時

public void windowClosing(WindowEvent e) { System.exit(0);

} });

(9)

ウインドウ型アプリケーションの作成

(1)

†

文字列表示プログラム

„

文字列を表示するアプレットをウインドウ型アプリケーションに変

更する。

„

注意点として,アプレットの座標はウインドウのタイトル下のメイン

ウインドウの座標で指定されていたが,フレームの場合はタイト

ルバーの端から座標を計算することになるため,

y座標の値を大

きくしておく必要がある。

g.drawString(ss, 10, 20); // アプレットの場合 g.drawString(ss, 10, 50); // フレームの場合

(10)

ウインドウ型アプリケーションの作成

(2)

import java.awt.*;

import java.awt.event.*;

class MyFrame extends Frame { // Frameを継承して窓を作成する

public MyFrame(String title) {

setTitle(title); // タイトル設定

addWindowListener(new WindowAdapter() { // 閉じるボタン対応

public void windowClosing(WindowEvent e) { System.exit(0); // 終了する

} }); }

public void paint(Graphics g) { String ss = "ABCabc文字列";

g.drawString(ss, 10, 50); // デフォルトのフォントで表示

g.setFont(new Font("Serif", Font.BOLD, 24));

g.drawString(ss, 10, 80); // Serif、太字、24ポイントを設定

g.setFont(new Font("MS ゴシック", Font.PLAIN, 24));

g.drawString(ss, 10, 110); // ゴシック、普通、24ポイントを設定

g.setFont(new Font("MS 明朝", Font.ITALIC, 36));

g.drawString(ss, 10, 150); // 明朝、斜体、36ポイントを設定

} }

public class JaFrmCh {

public static void main(String args[]) {

MyFrame frm = new MyFrame("文字列の出力"); // フレームの生成

frm.setSize(300, 200); // 窓サイズ横、縦

frm.setVisible(true); // フレームを表示する

} }

(11)

ウインドウ型アプリケーションのコンパイル実行

†

プログラム編集

notepad

†

javacでのコンパイル javac

†

プログラム実行

javaw

(ウインドウ用)

(12)

フレームクラスの説明

(1)

†

フレームクラスで定義されている主要なメソッド

„

Image

getIconImage()

†

最小化したときのアイコンイメージを返す

„

MenuBar

getMenuBar()

†

このフレームのメニューバーを返す

„

int

getStage()

†

フレームの状態を返す。アイコンならFrame.ICONIFIED,通常なら,

Frame.NORMAL

„

String

getTitle()

†

フレームのタイトルを返す

„

boolean

isResizable()

†

ユーザがフレームサイズを変更できるかどうかを示す

„

void

remove(MenuCompornent m)

†

指定されたメニューをこのフレームから削除する

„

void

setMenubar(Menubar mb)

†

メニューバーを設定する

(13)

フレームクラスの説明

(2)

„

void

setIconImage(Image image)

†

最小化した時のアイコンイメージを設定する

„

void

setResizeable()

†

ユーザがフレームサイズを変更できるようにする

„

void

setState(int state)

†

フレームの状態を設定する(Frame.ICONIFIED, Frame.NORMAL)

„

void

setSize(int width, int height)

†

フレームのサイズをwidth, heightに設定する

„

void

setVisible(boolean b)

†

フレームを表示(true),非常時(false)に設定する

„

void

addWindowListener(WindowListener l)

†

ウインドウイベントを受け取るためのウインドリスナを追加する

„

void

removeWindowListener(WindowListener l)

†

指定されたウインドウリスナを削除する

„

void

dispose()

†

ウインドウを開放する。非表示にするとともに,リソース開放する。

(14)

フレームクラスの説明

(3)

†

ウインドウリスナインタフェースの仕様

„

void

windowActivated(WindowEvent e)

†

ウインドウがアクティブ化されると呼び出される

„

void

windowClosed(WindowEvent e)

†

dispose()により開放されたウインドウを消去すると呼び出される

„

void

windowClosing(WindowEvent e)

†

ユーザがウインドウを閉じようとする時に呼び出される

„

void

windowDeactivated(WindowEvent e)

†

ウインドウが非アクティブ化されると呼び出される

„

void

windowDeiconefied(WindowEvent e)

†

ウインドウが非アイコン化されると呼び出される

„

void

windowIconified(WindowEvent e)

†

ウインドウがアイコン化されると呼び出される

„

void

windowOpened(WindowEvent e)

†

ウインドウがオープンすると呼び出される

(15)

課題

†

フレームに部品を配置するプログラムを作成しなさい。

„

BorderLayoutによりボタン1,テキストエリア,ボタン2が配置

„

ボタン

1をクリックするとテキストエリアに文字を埋める

(16)

import java.awt.*;

import java.awt.event.*;

class MyFrame extends Frame implements ActionListener { TextArea txtar1;

Button btn1, btn2;

public MyFrame(String title) {

super(title); // タイトル設定

// 文字列表示のボタンをBorderLayoutの北に配置 // テキストエリアをBorderLayoutの中央に配置 // txtar1 = new TextArea();

// 文字列クリアのボタンをBorderLayoutの南に配置 // 閉じるボタン対応

public void actionPerformed (ActionEvent e) { // ボタン押下対応 if (e.getSource() == btn1) { txtar1.setText("AAAAAAAAAA¥nBBBBBBBBBB¥nCCCCCCCCCC¥n"); } else if (e.getSource() == btn2) { txtar1.setText(""); } } }

public class JaFramKadai {

public static void main(String args[]) { MyFrame frm = new MyFrame("フレームテスト");

frm.setSize(300, 200); // 窓サイズを横300,縦200にする frm.setVisible(true) ; // フレームを表示する

} }

参照

関連したドキュメント

特に 2021 年から 2022 年前半については、2020 年にパンデミック受けての世界全体としてのガス需要減少があり、その反動

本時は、「どのクラスが一番、テスト前の学習を頑張ったか」という課題を解決する際、その判断の根

日本語で書かれた解説がほとんどないので , 専門用 語の訳出を独自に試みた ( たとえば variety を「多様クラス」と訳したり , subdirect

市民的その他のあらゆる分野において、他の 者との平等を基礎として全ての人権及び基本

第20回 4月 知っておきたい働くときの基礎知識① 11名 第21回 5月 知っておきたい働くときの基礎知識② 11名 第22回 6月

今回の調査に限って言うと、日本手話、手話言語学基礎・専門、手話言語条例、手話 通訳士 養成プ ログ ラム 、合理 的配慮 とし ての 手話通 訳、こ れら

 吹付け石綿 (レベル1) 、断熱材等 (レベル2) が使用されて

学部混合クラスで基礎的な英語運用能力を養成 対象:神・ 社 会・ 法・ 経 済・ 商・ 理 工・ 理・