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

awt の主要なクラスを下記に示す クラス Component Container Button Label Panel Frame 説明画面にユーザインターフェイス要素として表示し, ユーザとのやり取りを行うコンポーネントを表すすべてのコンポーネントのスーパークラスになる ほかのコンポーネントを含

N/A
N/A
Protected

Academic year: 2021

シェア "awt の主要なクラスを下記に示す クラス Component Container Button Label Panel Frame 説明画面にユーザインターフェイス要素として表示し, ユーザとのやり取りを行うコンポーネントを表すすべてのコンポーネントのスーパークラスになる ほかのコンポーネントを含"

Copied!
12
0
0

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

全文

(1)

3章 GUI による電卓の実装

GUI の基礎とイベント処理について理解し,前章で作成した演算プログラムを組み込んで電卓 を作成(実装)する。

3.1 インターフェイス

文字などのコマンドだけでやりとりするインターフェイスをCUI(Command User Interface)と呼び, マウスなどでウインドウを操作して行うインターフェイスを GUI(Graphical User Interface)と呼ぶ。 GUI はユーザがアプリケーションを操作する際に視覚的な認識や操作を可能にする。これらを利 用してプログラミングすることにより,電卓のようなGUI を作成することができる。

GUI を作成するためのクラスとして awt と swing がある。

awt(abstract window toolkit)とは,Java の GUI 作成を目的として提供されているクラス・ライブ ラリで,ウインドウ,フォーム,ボタンなどGUI に必要なクラスが準備されている。

awt クラスの拡張機能として,swing がある。awt と同様に GUI 作成を目的として提供されてい るクラス・ライブラリであり,awt と比較して実行速度,安定性の向上を図っている。

(2)

awt の主要なクラスを下記に示す。 クラス 説明 Component 画面にユーザインターフェイス要素として表示し,ユーザとのやり取りを行う コンポーネントを表す すべてのコンポーネントのスーパークラスになる Container ほかのコンポーネントを含むことができるコンテナを表す すべてのコンテナのスーパークラスになる Button ラベル付きボタンを表す Label テキストを配列するために使われる Panel ほかのコンポーネントを配置する単純なコンテナを表す Frame 見出しやボーダを持つトップレベルのウインドウを表す Component クラスの主要メソッドを下記に示す。 メソッド 説明 void paint(Graphics g) コンポーネントを描画する

void setVisible(boolean b) b が true の場合,コンポーネント表示 b が false の場合,コンポーネント非表示 Color getBackground() コンポーネントのバックグラウンドカラーを返す void setBackground(Color c) コンポーネントのバックグラウンドカラーを設定する

Container クラスの主要メソッドを下記に示す。

メソッド 説明

(3)

3.2 GUI でのパネル表示

GUI 表示をおこなうためには,awt および swing パッケージにあるクラスを使用する。

クラス パッケージ

JFrame,JPanel,JLabel javax.swing Container java.awt

パネルの追加(組み込み)の概略例は以下のようになる。

① 文字列”Hi, World!!”を追記した JLanel オブジェクト label を生成 → JLabel label = new JLabel(”Hi, World!!”);

② JPanel オブジェクト panel を生成し,これに label を追加 → JPabel panel = new JPanel(); panel.add(label);

③ JFrame オブジェクト frame を生成して,その ContentPane の情報(パネル用文字列表示 領域など)を得たものを,さらにContainer オブジェクト cont を生成してそこに入れる → JFrame frame = new JFrame(); Container cont = frame.getContentPane();

④ cont に panel を追加 → cont.add(panel);

(4)

3.3 ユーザクラスの定義 これまでは、外部クラスを使用して処理を行うことがなかったため,クラス定義を意識することが なかった。本章からは,GUI 処理により外部クラスメソッドとの処理があるため,改めてクラス定義 について説明する。 クラスはデータメンバとそれを操作するためのメソッドを一体化したもので,下記の書式で定義 される。 class クラス名{ データメンバ宣言(非公開部) public クラス名(引数 1, …) { コンストラクタ(公開部) } public 型 メソッド名(引数 1, …) { メソッド(公開部) } } コンストラクタは,クラスのオブジェクトが生成されるときに呼び出される特別な初期化メソッドで あり,クラス名と同じ名前となる。オブジェクト宣言時において,データメンバを初期化するのに用 いられる。 また,GUI レイアウト(後述)では,表示要素の初期値設定をしてコンストラクタを用いる。

(5)

3.4 レイアウト レイアウトとは,GUI コンポーネントを配置する方法であり,レイアウトを管理するためのオブジ ェクトであるレイアウト・マネージャを用いてレイアウト設定を行う。 レイアウトは下記記述例によりコンテナに登録することで設定できる。 レイアウトの 登録方法 コンテナ インスタンス名.setLayout(レイアウトマネージャ インスタンス) レイアウトには,フローレイアウト,ボーダーレイアウト,グリッドレイアウトがある。 (フローレイアウトの例) (ボーダーレイアウトの例) (グリッドレイアウトの例) これらの各レイアウトについて,以下説明する。

(6)

3.4.1 フローレイアウト フローレイアウト(Flow Layout)は,コンポーネントを左から右方向に順に配置する。なお,1 行 に収まらない場合は次の行に移動して配置(改行)する。 レイアウト指定を行わないパネルはフローレイアウトとなる。 コンストラクタ名 説明 FlowLayout() 中央揃えデフォルト間隔(5 単位)で配置 FlowLayout を生成

FlowLayout(int align) align 位置揃えとデフォルト間隔(5 単位)で配置 FlowLayout を生成,align には次を指定できる

FlowLayout.LEFT: 左揃え FlowLayout.RIGHT: 右揃え FlowLayout.CENTER: 中央揃え

FlowLayout(int align, int hgap, int vgap) 指定された位置揃え、横間隔、縦間隔で配置 FlowLayout を生成

メソッド名 説明

getHgap() コンポーネント水平方向間隔を取得

getVgap() コンポーネント垂直方向間隔を取得

(7)

3.4.2 ボーダーレイアウト ボーダーレイアウト(Border Layout)は,ウインドウ境界とコンポーネント境界を接するように配 置する。 フレームサイズ変更されても配置関係を保持できる。 コンストラクタ名 説明 BorderLayout() 間隔を開けずに配置するBorderLayout を生成 BorderLayout.NORTH BorderLayout.SOUTH BorderLayout.WEST BorderLayout.CENTER BorderLayout.EAST

BorderLayout(int h, int v) 指定された横と縦の間隔で配置してBorderLayout を生成 メソッド名 説明 getHgap() コンポーネント水平方向間隔を取得 getVgap() コンポーネント垂直方向間隔を取得 layoutContainer(Container コンテナ) 指定したコンテナを配置 ※ フレームの大きさを変えるとCENTER の大きさが変わる。

(8)

3.4.3 グリッドレイアウト グリッドレイアウト(Grid Layout)は,行数と列数および配置するコンポーネントの個数から格子 状に配置する。 行数の指定が0 の場合 列数の指定: 有効 行数 = ( コンポーネント数 + 列数 - 1 ) ÷ 列数 列数 = 列数 行数の指定が1 以上の場合 列数の指定: 無効 (※ 列数を指定しても使われない。) 行数 = 行数 列数 = ( コンポーネント数 + 行数 - 1 ) ÷ 行数 コンストラクタ名 説明 GridLayout() 格子状に配置するGridLayout を生成 (1 行と 1 列に 1 つのコンポーネント) GridLayout(int r, int c) r ( 行 ) × c ( 列 ) 個 の コ ン ポ ー ネ ン ト を 配 置 す る GridLayout を生成

GridLayout(int r, int c, int h, int v) r(行)×c(列)個のコンポーネントを,指定された 水平方向,垂直方向の間隔で配置するGridLayout を

(9)

3.5 コンポーネントのイベント処理 イベントとは,GUI を持つプログラムに置いて,マウスのボタンクリックのように何らかの処理を 引き起こす操作のことである。Java では,イベントの発生元であるイベントソースを監視するオブジ ェクトにイベントリスナーを登録し,イベント処理メソッド内に処理内容を記述する。 今回の場合は主に,Swing コンポーネントのイベント処理方法について学習する。 Swing コンポーネントのイベント処理には,下記のクラス・メソッドを用いて行う。 イベント クラス名 イベントリスナー クラス名 イベント処理 メソッド名 (対象クラス) ActionEvent ActionListener (ボタン系イベント用) actionPerformed JButton JTextField JTextArea JRadioButton JCheckBox JComboBox JMenuItem JCheckBoxItem 例として,ボタン1 とボタン 2 がクリックされたときのイベント処理記述を下記に示す。 addActionListener クラスでボタンをアクションリスナーに登録し,イベント発生時の処理内容を e.getSource クラスで判定して記述する。ボタンが単数の場合,記述内容が少ないため問題ないが, 複数ある場合,単数での書式を繰り返し記述するのは効率が悪い。 そこで,ボタンが複数の場合,implements を用いた記述を使うことで記述内容を整理することが できる。

(10)

イベント処理 書式例

ボタンが単数の場合 ボタン1 名.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){

// ボタン 1 の処理 } }); ボタンが複数ある場合 (ActionListener を implements)

public class クラス名 extends JFrame implements ActionListener{ // JFrame クラスに ActionListener クラスの機能を提供

ボタン1 名.addActionListener(this); ボタン2 名.addActionListener(this);

public void actionPerformed(ActionEvent e){

// 以下,イベントを起こしたソースオブジェクトを取得 if(e.getSource() == ボタン 1 名){ // ボタン 1 の処理 } else if(e.getSource() == ボタン 2 名){ // ボタン 2 の処理 } } }

(11)

3.6 レイアウトとイベント処理の統合 パネルレイアウトによる GUI パネル作成とイベント処理についてそれぞれ,これまで学習した。 また,extends(拡張,すなわちクラスの継承)によってパネル作成クラスにイベント処理を拡張する ことができる。 CUI で作成した演算プログラム(前章)に織り込みを行う前に,ソースの利便性を考慮して,GUI パネル作成とイベント処理を,1 つのクラスにまとめる。さらに,”=”ボタン以外の入力を積み上げ て表示する機能をプログラムしておく。

(12)

3.7 String クラスの文字列操作 String クラスには文字列操作を行うためにメソッドが準備されているが,本演習での電卓プログ ラムの実装にあたり(前章でも使用したが),この点について解説しておく。 文字列は基本型ではなくクラスのオブジェクト(String 型)として扱うため,文字列の操作には String クラスのメソッドを使うことはすでに学習している。追加で使用するメソッドとして下記がある。 String 型の文字列は,基本的に変更できないものとして扱われる。String 型の変数に文字列を代 入すると,定数と同様にその文字列を変更することができない(但し,変数に別の文字列を代入す ることはできる)。文字列からその一部を取り出すには,String クラスの substring()メソッドを使う。 メソッド 機能 使用例 int length() 文字列長(文字数) 文字数を返す (int 型整数) 【記述例】 String s = ”123456”; System.out.println(s.length()); 【上記の表示結果】 6 substring(start) 文字列の取り出し 開始位置はstart + 1 終了位置は最後 【記述例】 String s = "123456"; System.out.println(s.substring(0)); System.out.println(s.substring(1)); System.out.println(s.substring(6)); 【上記の表示結果】 123456 23456 (無し) substring(start, end) 文字列の取り出し 開始位置はstart + 1 終了位置はend 【記述例】 String s = "123456"; System.out.println(s.substring(0, 3)); System.out.println(s.substring(1, 3));

参照

関連したドキュメント

SD カードが装置に挿入されている場合に表示され ます。 SD カードを取り出す場合はこの項目を選択 します。「 SD

実際, クラス C の多様体については, ここでは 詳細には述べないが, 代数 reduction をはじめ類似のいくつかの方法を 組み合わせてその構造を組織的に研究することができる

回転に対応したアプリを表示中に本機の向きを変えると、 が表 示されます。 をタップすると、縦画面/横画面に切り替わりま

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

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

パキロビッドパックを処方入力の上、 F8特殊指示 →「(治)」 の列に 「1:する」 を入力して F9更新 を押下してください。.. 備考欄に「治」と登録されます。

燃料取り出しを安全・着実に進めるための準備・作業に取り組んでいます。 【燃料取り出しに向けての主な作業】

LUNA 上に図、表、数式などを含んだ問題と回答を LUNA の画面上に同一で表示する機能の必要性 などについての意見があった。そのため、 LUNA