@634

おえかき その6 メニューの利用

Advertisement

メニューくっつけ。

とりあえずー、メニューつくって、前回の「元に戻す」と「画面消去」の機能をつけましょう。説明なしでイキナリ実装。説明はそのうちこっちでヤル。
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class Gr{
    public static void main(String args[]){
        mainFrame f = new mainFrame();
        f.setSize(400, 300);
        f.setTitle("タイトル");
        f.show();
    }
}

class mainFrame extends Frame implements WindowListener,
                                MouseListener, ActionListener{
    int x, y;
    Vector v1 = new Vector();

    MenuBar mb = new MenuBar();
    Menu file, edit, help;
    MenuItem quit;
    MenuItem undo, clear;

    mainFrame(){
        file = new Menu("ファイル");
        edit = new Menu("編集");
        help = new Menu("ヘルプ");

        quit = new MenuItem("終了");
        undo = new MenuItem("元に戻す");
        clear = new MenuItem("画面消去");

        file.add(quit);
        edit.add(undo);
        edit.addSeparator();  //セパレータ
        edit.add(clear);

        mb.add(file);
        mb.add(edit);
        mb.add(help);
        mb.setHelpMenu(help);

        setMenuBar(mb);

        quit.addActionListener(this);
        clear.addActionListener(this);
        undo.addActionListener(this);

        addWindowListener(this);
        addMouseListener(this);
    }

    public void paint(Graphics g){
        for(int i = 0; i < v1.size(); i++){
            ((LineData)v1.elementAt(i)).Draw(g);
        }
    }

    public void mousePressed(MouseEvent e){
    	x = e.getX();
    	y = e.getY();
    }

    public void mouseReleased(MouseEvent e){
        v1.addElement(new LineData(x, y, e.getX(), e.getY()));
        repaint();
    }

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

    public void actionPerformed(ActionEvent e){
        if(e.getSource() == quit){
            System.exit(0);
        }

        if(e.getSource() == undo && v1.size() > 0){
            v1.remove(v1.size()-1);
            repaint();
        }

        if(e.getSource() == clear){
            v1.removeAllElements();
            repaint();
        }
    }

    public void windowOpened(WindowEvent e){}
    public void windowClosed(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowActivated(WindowEvent e){}
    public void windowDeactivated(WindowEvent e){}

    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseClicked(MouseEvent e){}
}

class LineData{
    private int sx, sy;
    private int ex, ey;

    public LineData(int x1, int y1, int x2, int y2){
        sx = x1;
        sy = y1;
        ex = x2;
        ey = y2;
    }

    public void Draw(Graphics g){
        g.drawLine(sx, sy, ex, ey);
    }
}
はー。ながくなった。

実行結果
実行結果

おお。なかなかヨイね。でけた。
ちなみにactionPerformed()の処理中の連続if文は、もちろんelse ifとかで大丈夫だい。いや、なんとなくさ、読みにくくなりそうだと思ってな。

次回は何しよ。
とりあえず線の色とか多角形とか、細かいトコかな。

Advertisement

ショートカット

634トップページ
このカテゴリのトップページに戻る
634ラボ
   UIコレクションギャラリー

サイト検索

Google

Web サイト内

Y!ログール