root/graph/JavaPopWeb/src/jp/ac/nime/computer/grpsimulator/VecPr/VectorFrame.java

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. VectorFrame
  2. main
  3. init
  4. paint
  5. CanvasNime
  6. paint
  7. InitBtn
  8. actionPerformed
  9. saveBtn
  10. actionPerformed
  11. LoadBtn
  12. actionPerformed
  13. evtMouse
  14. mousePressed
  15. mouseDragged
  16. mouseReleased

package jp.ac.nime.computer.grpsimulator.VecPr;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import jp.ac.nime.computer.grpsimulator.*;

/** 画像データ表現 点用専用データファイルを作成するためのプログラム用メインクラス
 * @version 1.0.0
 * @author kikuchi
 */
public class VectorFrame extends JFrame {
        JButton jButton0_;  
        JLabel jlabel2_;
        JButton jButton1_;
        JButton jButton2_;
        Canvas jCanvas_;
        int drawFlg_ = 0;                                       // 描画ツールを識別するフラグ変数  
        int pressX_ = 0, pressY_ =0;            // Mouseが押された位置のxy座標  
        static int start_x_ = 0, start_y_ = 0;                  // 描画の開始位置(左上xy座標) 
        Color drawColor = Color.black;
        // 図形データ
        GrpSimVectorData        gsvd_;
        // 一回のマウスドラッグで覚える座標
        int[] drX_, drY_;
        int     numDr_; // ドラッグしたときのポイント数
        // 表示領域
        int width_, height_;
        BufferedImage img_;
        // file 入出
        String dstPath_;
        String srcPath_;
        
        public VectorFrame(){      // コンストラクタ
                init();
                gsvd_ = new GrpSimVectorData();
                drX_ = new int [2048];
                drY_ = new int [2028];
                width_ = 320;
                height_ = 240;
                img_ = new BufferedImage(width_, height_, BufferedImage.TYPE_INT_ARGB);
                for (int h = 0; h < height_ ; h ++) {
                        for (int w = 0; w < width_; w ++) {
                                img_.setRGB(w, h, 0xffffffff);
                        }
                }

                // 
                setTitle("DDVD File Editer");
                
                //
                dstPath_ = new String();
                srcPath_ = new String();
        }


        public static void main(String args[]) {
                VectorFrame df = new VectorFrame();
                df.setVisible(true);
        }
        
        public void init() {
                //this.setSize(new Dimension(300, 250));
                setBackground(Color.white);
                jButton0_ = new JButton("Mouseで図形を描いてください。(初期化)");
                jButton0_.setVisible(true);
                jButton0_.addActionListener(new InitBtn());
                getContentPane().add(jButton0_, BorderLayout.NORTH);    
                jlabel2_ = new JLabel("結果を表示");  
                jlabel2_.setVisible(true);
                getContentPane().add(jlabel2_, BorderLayout.SOUTH);
                jButton1_ = new JButton("Load");
                jButton1_.addActionListener(new LoadBtn(this));
                getContentPane().add(jButton1_, BorderLayout.WEST);
                jButton2_ = new JButton("Save");
                jButton2_.addActionListener(new saveBtn(this));
                getContentPane().add(jButton2_, BorderLayout.EAST);
                //jCanvas_ = new CanvasNime();
                //getContentPane().add(jCanvas_, BorderLayout.CENTER);
                
                // イベント
                addMouseListener(new evtMouse());    
                addMouseMotionListener(new evtMouse());
                
                /* 終了処理を追加 */
        addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e){System.exit(0);}
                                });
                

                setSize(500, 400);
                
                start_x_ = 0;
                start_y_ = 0;
        }

        public void paint(Graphics g){
                // 描画位置
                if (start_x_ == 0) {
                        start_x_ = jButton1_.getBounds().x + jButton1_.getBounds().width + 20;
                        start_y_ = jButton1_.getBounds().y + 30;
                }
                super.paint(g);
                gsvd_.write(img_);
                g.drawImage(img_, start_x_, start_y_, this);            
/*
                g.setColor(drawColor);
                start_x = Math.min(pressX,X);   // MouseのPress/Release時の小さいほうのx座標    
                start_y = Math.min(pressY,Y);   // MouseのPress/Release時の小さいほうのy座標    
                draw_w = Math.abs(pressX-X);    //Mouseがドラッグされた範囲の幅    
                draw_h = Math.abs(pressY-Y);    //Mouseがドラッグされた範囲の高さ    
                if(drawFlg == 1)
                        g.drawLine(pressX,pressY,X,Y);//直線を描画    
                else if(drawFlg == 2)
                        g.drawRect(start_x,start_y,draw_w,draw_h);  //四角形を描画    
                else if(drawFlg == 3)
                        g.drawOval(start_x,start_y,draw_w,draw_h);  //楕円を描画  
*/
        }
        
        class CanvasNime extends Canvas {
                public void paint(Graphics g) {
                        gsvd_.write(img_);
                        g.drawImage(img_, start_x_, start_y_, this);            
                }
        }
        
        
        public class InitBtn implements ActionListener {
                public void actionPerformed(ActionEvent e){
                        // クリア
                        gsvd_.clr();
                        for (int h = 0; h < height_ ; h ++) {
                                for (int w = 0; w < width_; w ++) {
                                        img_.setRGB(w, h, 0xffffffff);
                                }
                        }

                        repaint();
                }
        }       
        
        // --- 内部クラス
        
        
        /** SaveButton処理
         */
        public class saveBtn implements ActionListener {
                Component       cmp_;
                public saveBtn(Component cmp) {
                        cmp_ = cmp;
                }
                public void actionPerformed(ActionEvent e){
                        if (gsvd_.size() == 0) return;  // saveする内容がない
                        JFileChooser fc = new JFileChooser(dstPath_);
                        fc.setAcceptAllFileFilterUsed(false);
                        FileFilterNime dsddFilter = new FileFilterNime(".gsdd", "GrpSimDraw-File");
                        fc.addChoosableFileFilter(dsddFilter);
                        fc.setFileFilter( dsddFilter );
                        if (JFileChooser.APPROVE_OPTION == fc.showSaveDialog(cmp_)) {
                                dstPath_ = fc.getCurrentDirectory().getAbsolutePath();
                                File f = fc.getSelectedFile();
                                if (f != null) {
                                        setCursor( Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR) );
                                        try{
                                                // 指定されたファイル形式で保存する
                                                FileFilterNime filter = (FileFilterNime)fc.getFileFilter();
                                                if (!filter.accept(f)) { // 拡張子が無い時は付ける
                                                        File f2 = new File(f.getAbsolutePath() + filter.getExtension());
                                                        if (!f2.isDirectory()) f = f2;
                                                }
                                                // 出力
                                    FileOutputStream fo = new FileOutputStream(f);
                                    PrintStream ps = new PrintStream(fo);
                                                String lines[] = gsvd_.toLines();       // data化
                                                for (int i = 0; i < gsvd_.size(); i ++) {
                                                        ps.println(lines[i]);
                                                }
                                    ps.close();
                                    fo.close();
                                        } catch(IOException ee) {}
                                        setCursor( Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR) );
                                }
                        }
                }
        }
        
        /** LoadButton処理
         */
        public class LoadBtn implements ActionListener {
                Component       cmp_;
                public LoadBtn(Component cmp) {
                        cmp_ = cmp;
                }
                public void actionPerformed(ActionEvent e){
                        JFileChooser fc = new JFileChooser(srcPath_);
                        FileFilterNime dsddFilter = new FileFilterNime(".dsdd", "GrpSimDraw-File");
                        fc.addChoosableFileFilter( dsddFilter );
                        fc.setFileFilter( dsddFilter );
                        if (JFileChooser.APPROVE_OPTION == fc.showOpenDialog(cmp_)) {
                                srcPath_ = fc.getCurrentDirectory().getAbsolutePath();
                                File f = fc.getSelectedFile();
                                if (f!=null) {
                                        setCursor( Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR) );
                                        try{
                                                // クリア
                                                gsvd_.clr();
                                                // 入力 全ての行を読む
                                                FileInputStream fi = new FileInputStream(fc.getSelectedFile());
                                                BufferedReader br = new BufferedReader(new InputStreamReader(fi));
                                                while (br.ready()) {
                                                        String str = br.readLine();
                                                        gsvd_.add(str);
                                                }
                                                br.close();
                                                fi.close();
                                        }
                                        catch(Exception ee) {}
                                        setCursor( Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR) );
                                }
                        }
                }
        }
        
        public class evtMouse extends MouseInputAdapter {  // マウスリスナーを作成
                /** マウスpush
                 */
                public void mousePressed(MouseEvent e) {
                        pressX_ = e.getX() - start_x_;      
                        pressY_ = e.getY() - start_y_;      
                        numDr_ = 1;     // ドラッグ開始
                        drX_[0] = pressX_;
                        drY_[0] = pressY_;
                        
                        if (e.getModifiers() == InputEvent.BUTTON1_MASK) {    //左Buttonの場合
                                jlabel2_.setText("左ボタンのPush位置は X = " + pressX_ + ", Y = " + pressY_);      
                        }
                        
                }    
                public void mouseDragged(MouseEvent e) { 
                        int x, y;
                        x = e.getX() - start_x_;      
                        y = e.getY() - start_y_;
                        if (SwingUtilities.isLeftMouseButton(e)) {    //左Buttonの場合        
                                jlabel2_.setText("現在位置は X = " + x + ", Y = " + y);        
                                if(e.isShiftDown())                     drawFlg_ = 1;
                                else if(e.isControlDown())      drawFlg_ = 2;        
                                else if(e.isAltDown())          drawFlg_ = 3;
                                else                                            drawFlg_ = 0;
                                if (drawFlg_ == 0) {
                                        // 座標記憶
                                        drX_[numDr_] = x;
                                        drY_[numDr_] = y;
                                        numDr_ ++;
                                        img_.setRGB(x, y, 0xff000000);
                                        repaint();
                                }
                        }
                        // 次のために
                        pressX_ = x;      
                        pressY_ = y;      
                }  
                /** マウスリリース
                 */
                public void mouseReleased(MouseEvent e) {
                        if (numDr_ > 1) {
                                // Polineを設定
                                gsvd_.addPoline(numDr_, drX_, drY_);
                                numDr_ = 0;
                                repaint();
                        }
                }
        }
}


/* [<][>][^][v][top][bottom][index][help] */