GUI

ボタンを付ける

GUI(Graphical User Interface)とは,マウスで操作するボタンの類のことです。 ジーユーアイと読んでもかまいませんが,英語ではグーイと読みます。

ここではアプレットにボタンとテキストエリアを配置してみましょう。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GUITest extends JApplet implements ActionListener {
    JTextArea txt;

    public void init() {
        Container cnt = getContentPane();
        JButton btn = new JButton("押してね!");
        txt = new JTextArea(10, 20);
        JScrollPane scr = new JScrollPane(txt);
        cnt.add(btn, BorderLayout.NORTH);
        cnt.add(scr, BorderLayout.SOUTH);
        btn.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        txt.append(Math.random() + "\n");
    }
}

この GUITest.java を次のようにコンパイルします:

javac -source 1.2 -target 1.2 GUITest.java

このアプレットは java.awt.event.ActionListener というインターフェースを実装(implement)しています。 このインターフェースを実装し,GUI部品に対してaddActionListener(this) しておくと,何かイベントが発生したときに actionPerformed() というメソッドが呼び出されます。 ここではテキストエリアに乱数をアペンドしています。

このテキストエリアは,行が長いと横方向にもスクロールバーが出ます。 これを出ないようにして,長い行は折り返すようにするには,txt.setLineWrap(true); とします。

もっとボタンを

ボタンを二つにしてみます。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GUITest2 extends JApplet implements ActionListener {
    JTextArea txt;

    public void init() {
        Container cnt = getContentPane();
        cnt.setLayout(new FlowLayout());
        JButton btn1 = new JButton("はろー!");
        JButton btn2 = new JButton("やっほ!");
        txt = new JTextArea(10, 20);
        JScrollPane scr = new JScrollPane(txt);
        cnt.add(btn1);
        cnt.add(btn2);
        btn1.setActionCommand("Hello");
        btn2.setActionCommand("Yahho");
        cnt.add(scr);
        btn1.addActionListener(this);
        btn2.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Hello")) {
            txt.append("はろー\n");
        } else {
            txt.append("やっほ\n");
        }
    }
}

文字列の比較に equals() を使っています。もし

        if (e.getActionCommand() == "Hello") {

としたなら,エラーは起こりませんが,二つの Hello という文字列が別のアドレスに保存されているときは,等しくないという結果になってしまいます。

もっと簡単な方法

上の方法はたくさんボタンがあるとわずらわしくなってきます。 次のほうにするほうがスマートです。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GUITest3 extends JApplet {
    JTextArea txt;

    public void init() {
        Container cnt = getContentPane();
        cnt.setLayout(new FlowLayout());
        JButton btn1 = new JButton("はろー!");
        JButton btn2 = new JButton("やっほ!");
        txt = new JTextArea(10, 20);
        JScrollPane scr = new JScrollPane(txt);
        cnt.add(btn1);
        cnt.add(btn2);
        cnt.add(scr);
        btn1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    txt.append("はろー\n");
                }
            });
        btn2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    txt.append("やっほ\n");
                }
            });
    }
}

奥村晴彦

Last modified: 2006-01-03 10:43:47