@634

おえかき その9 図形を増やそう

Advertisement

かける図形をふやそー

色が選択できるようになったから、塗りつぶした図形をかけるようにしよ。
図形増やして、あーそうだ。図形のCheckboxItemMenuも配列化しちゃお。ほら、さらに増やすときに、すっげーラクだからさ。

やるぜ

配列化とかリスナ登録とかは前回と同じ感じ。
図形のクラスが2個増える→図形オブジェクト生成の場所(mouseReleased)変更。
ん、それだけだな。
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, ItemListener{
    int x, y;
    int figureFlag;
    Color col;

    Vector v1 = new Vector();
    MenuBar mb = new MenuBar();
    Menu file, edit, help;
    Menu figure, color;
    MenuItem quit, undo, clear;
    CheckboxMenuItem[] figItem = new CheckboxMenuItem[5];
    CheckboxMenuItem[] colItem = new CheckboxMenuItem[13];

    mainFrame(){
        int i;
        col = Color.black;
        figureFlag = 0;

        file = new Menu("ファイル");
        edit = new Menu("編集");
        help = new Menu("ヘルプ");
        figure = new Menu("図形選択");
        color = new Menu("描画色選択");
        quit = new MenuItem("終了", new MenuShortcut(KeyEvent.VK_X, false));
        undo = new MenuItem("元に戻す", new MenuShortcut(KeyEvent.VK_Z, false));
        clear = new MenuItem("画面消去");

        String[] str1 = {"直線","四角形","楕円",
                        "塗りつぶした四角形","塗りつぶした楕円"};
        for(i = 0; i < figItem.length; i++)
                        figItem[i] = new CheckboxMenuItem(str1[i]);

        figItem[0].setShortcut(new MenuShortcut(KeyEvent.VK_L, false));
        figItem[1].setShortcut(new MenuShortcut(KeyEvent.VK_R, false));
        figItem[2].setShortcut(new MenuShortcut(KeyEvent.VK_O, false));


        String[] str2 = {"黒","青","シアン",
                        "ダークグレイ","グレイ",
                        "緑","ライトグレイ",
                        "マゼンダ","オレンジ",
                        "ピンク","赤","白","黄色"};

        for(i = 0; i < colItem.length; i++)
                          colItem[i] = new CheckboxMenuItem(str2[i]);

        for(i = 0; i < figItem.length; i++){figure.add(figItem[i]);}
        for(i = 0; i < colItem.length; i++){color.add(colItem[i]);}
        file.add(quit);
        edit.add(undo);
        edit.addSeparator();
        edit.add(figure);
        edit.add(color);
        edit.add(clear);
        mb.add(file);
        mb.add(edit);
        mb.add(help);
        mb.setHelpMenu(help);

        setMenuBar(mb);

        for(i = 0; i < figItem.length; i++){figItem[i].addItemListener(this);}
        for(i = 0; i < colItem.length; i++){colItem[i].addItemListener(this);}
        quit.addActionListener(this);
        clear.addActionListener(this);
        undo.addActionListener(this);
        addWindowListener(this);
        addMouseListener(this);

        figItem[0].setState(true);
        colItem[0].setState(true);
    }

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

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

    public void mouseReleased(MouseEvent e){
        if(figureFlag == 0){
            v1.addElement(new LineData(x, y, e.getX(), e.getY(), col));
        }else if(figureFlag == 1){
            v1.addElement(new RectData(x, y, e.getX(), e.getY(), col));
        }else if(figureFlag == 2){
            v1.addElement(new OvalData(x, y, e.getX(), e.getY(), col));
        }else if(figureFlag == 3){
            v1.addElement(new FillRectData(x, y, e.getX(), e.getY(), col));
        }else if(figureFlag == 4){
            v1.addElement(new FillOvalData(x, y, e.getX(), e.getY(), col));
        }
        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 itemStateChanged(ItemEvent e){
        if(e.getSource() == figItem[0]){
            figureFlag = 0;
            for(int i = 0; i < figItem.length; i++){figItem[i].setState(false);}
            figItem[0].setState(true);
        }else if(e.getSource() == figItem[1]){
            figureFlag = 1;
            for(int i = 0; i < figItem.length; i++){figItem[i].setState(false);}
            figItem[1].setState(true);
        }else if(e.getSource() == figItem[2]){
            figureFlag = 2;
            for(int i = 0; i < figItem.length; i++){figItem[i].setState(false);}
            figItem[2].setState(true);
        }else if(e.getSource() == figItem[3]){
            figureFlag = 3;
            for(int i = 0; i < figItem.length; i++){figItem[i].setState(false);}
            figItem[3].setState(true);
        }else if(e.getSource() == figItem[4]){
            figureFlag = 4;
            for(int i = 0; i < figItem.length; i++){figItem[i].setState(false);}
            figItem[4].setState(true);
        }


        if(e.getSource() == colItem[0]){
            col = Color.black;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[0].setState(true);
        }else if(e.getSource() == colItem[1]){
            col = Color.blue;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[1].setState(true);
        }else if(e.getSource() == colItem[2]){
            col = Color.cyan;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[2].setState(true);
        }else if(e.getSource() == colItem[3]){
            col = Color.darkGray;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[3].setState(true);
        }else if(e.getSource() == colItem[4]){
            col=  Color.gray;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[4].setState(true);
        }else if(e.getSource() == colItem[5]){
            col = Color.green;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[5].setState(true);
        }else if(e.getSource() == colItem[6]){
            col = Color.lightGray;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[6].setState(true);
        }else if(e.getSource() == colItem[7]){
            col = Color.magenta;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[7].setState(true);
        }else if(e.getSource() == colItem[8]){
            col = Color.orange;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[8].setState(true);
        }else if(e.getSource() == colItem[9]){
            col = Color.pink;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[9].setState(true);
        }else if(e.getSource() == colItem[10]){
            col = Color.red;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[10].setState(true);
        }else if(e.getSource() == colItem[11]){
            col = Color.white;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[11].setState(true);
        }else if(e.getSource() == colItem[12]){
            col = Color.yellow;
            for(int i = 0; i < colItem.length; i++){colItem[i].setState(false);}
            colItem[12].setState(true);
        }
    }

    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){}
}

abstract class Figure{
    protected int sx;
    protected int sy;
    protected int ex;
    protected int ey;
    protected Color col;

    public Figure(int x1, int y1, int x2, int y2, Color c){
        sx = x1;
        sy = y1;
        ex = x2;
        ey = y2;
        col = c;
    }

    abstract void Draw(Graphics g);
}

class LineData extends Figure{
    public LineData(int x1, int y1, int x2, int y2, Color c){
        super(x1, y1, x2, y2, c);
    }

    public void Draw(Graphics g){
        g.setColor(col);
        g.drawLine(sx, sy, ex, ey);
    }
}

class RectData extends Figure{
    public RectData(int x1, int y1, int x2, int y2, Color c){
        super(x1, y1, x2, y2, c);
    }

    public void Draw(Graphics g){
        g.setColor(col);
        g.drawRect(sx<ex?sx:ex, sy<ey?sy:ey,
                      Math.abs(sx-ex), Math.abs(sy-ey));
    }
}

class OvalData extends Figure{
    public OvalData(int x1, int y1, int x2, int y2, Color c){
        super(x1, y1, x2, y2, c);
    }

    public void Draw(Graphics g){
        g.setColor(col);
        g.drawOval(sx<ex?sx:ex, sy<ey?sy:ey,
                       Math.abs(sx-ex), Math.abs(sy-ey));
    }
}

class FillRectData extends Figure{
    public FillRectData(int x1, int y1, int x2, int y2, Color c){
        super(x1, y1, x2, y2, c);
    }

    public void Draw(Graphics g){
        g.setColor(col);
        g.fillRect(sx<ex?sx:ex, sy<ey?sy:ey,
                       Math.abs(sx-ex), Math.abs(sy-ey));
    }
}

class FillOvalData extends Figure{
    public FillOvalData(int x1, int y1, int x2, int y2, Color c){
        super(x1, y1, x2, y2, c);
    }

    public void Draw(Graphics g){
        g.setColor(col);
        g.fillOval(sx<ex?sx:ex, sy<ey?sy:ey,
                       Math.abs(sx-ex), Math.abs(sy-ey));
    }
}
簡単だ。

実行イメージ
実行イメージ
選択色で塗りつぶす。

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール