宿題スレPart53 875-876


宿題スレPart53 >>875-876

   // Ex8B_3.java
   import java.awt.BorderLayout;
   import java.awt.GridLayout;
   import java.awt.Container;
   import java.awt.Color;
   import java.awt.Dimension;
   import java.awt.Font;
   import javax.swing.JRadioButton;
   import java.awt.Graphics;
   import java.awt.FontMetrics;
   import javax.swing.BoxLayout;
   import javax.swing.JPanel;
   import javax.swing.JFrame;
   import javax.swing.JTextField;
   import javax.swing.JLabel;
   import javax.swing.ButtonGroup;
   import javax.swing.JMenuBar;
   import javax.swing.JMenu;
   import javax.swing.JMenuItem;
   import javax.swing.JComponent;
   import javax.swing.KeyStroke;
   import javax.swing.JOptionPane;
   import javax.swing.JButton;
   import javax.swing.ButtonGroup;
   import javax.swing.Timer;
   import java.awt.event.ActionEvent;
   import java.awt.event.ActionListener;
   import java.awt.event.MouseMotionAdapter;
   import java.awt.event.MouseAdapter;
   import java.awt.event.MouseEvent;
   import java.awt.event.WindowEvent;
   import java.awt.event.WindowAdapter;
   import java.awt.event.InputEvent;
   import java.awt.event.KeyEvent;
   import java.awt.event.MouseMotionAdapter;
   
   class Ex8B_3 extends JFrame{
       Ex8B_3(){
           Ex7B_1 g1 = new Ex7B_1();//Ex7B_1オブジェクトの生成
           MenuBar menubar = new MenuBar();//MenuBarオブジェクトの生成
           setJMenuBar(menubar);    //メニューバーをおく
           Container pane = getContentPane();//フレームの内容表示域を得る
           pane.setLayout(new BoxLayout(pane,BoxLayout.Y_AXIS));//配置方式の設定
           pane.add(g1);            //作成したパネルをおく
           pack();                  //フレームを必要最小の大きさにする
           setVisible(true);        //フレームを画面に見せる
       }
       public static void main(String[] args){//メインメソッド
           Ex8B_3 frame = new Ex8B_3();//Ex8B_3のオブジェクトを生成
           frame.addWindowListener(new WindowAdapter() {//フレームのイベント設定
               public void windowClosing(WindowEvent e) {//フレームを閉じたとき
                   System.exit(0);     //終了
               }
           });
           frame.setTitle("Ex8B_3");//タイトルの設定
       }
   }
   class MenuBar extends JMenuBar{
       JMenuItem item1,item2;                 //JMenuItemオブジェクトの宣言
       Listener1 listener;                    //Listener1オブジェクトの宣言
       MenuBar(){ //メニューとメニューアイテムを持つメニューバーの作成
           listener = new Listener1();//Listener1オブジェクトの生成
           JMenu menu1 = new JMenu("ファイル");//JMenuオブジェクトの生成
           JMenu menu2 = new JMenu("ヘルプ");//JMenuオブジェクトの生成
           item1 = new JMenuItem("終了(Ctrl+Shift+x)");//JMenuItem
                                                       //オブジェクトの生成
           item2 = new JMenuItem("バージョン情報(Ctrl+Shift+v)");//JMenuItem
                                                              //オブジェクトの生成
           JMenuItem item1 = new JMenuItem("終了(Ctrl+x)");
           JMenuItem item2 = new JMenuItem("バージョン情報(Ctrl+Shift+v)");
   
           item1.setActionCommand("I1");
           item2.setActionCommand("I2");
           item1.addActionListener(listener);
           item2.addActionListener(listener);
           item1.setAccelerator(KeyStroke.getKeyStroke("ctrl X"));
           item2.setAccelerator(KeyStroke.getKeyStroke("ctrl shift V"));
   
           add(menu1);
           add(menu2);
               
           menu1.add(item1);
           menu2.add(item2);
       }
       class Listener1 implements ActionListener{//リスナークラス(内部クラス)
           public void actionPerformed(ActionEvent e){//イベントが起きたとき
               String str = e.getActionCommand();//識別させたイベントの文字をえる
               if(str.compareTo("I1") == 0){//識別の文字が"I1"の場合
                   System.exit(0);       //終了
               }else if(str.compareTo("I2") == 0){//識別の文字が"I2"の場合
                   JOptionPane.showMessageDialog(null, "Ex8B_3"+"?n"+
                     "produced by "+"?n"+"version 1.0.0", "Version情報"
                     , JOptionPane.INFORMATION_MESSAGE);//インフォメーション
                                                        //メッセージの表示
               }
           }
       }
   }
   class Ex7B_1 extends JPanel{
       Graphinfo graph;//Graphinfoオブジェクトの宣言
       GraphPanel graph2;//GraphPanelオブジェクトの宣言
       InfoPanel graph3;//InfoPanelオブジェクトの宣言
       JPanel p1,p2,p3;//JPanelオブジェクトの宣言
       JLabel l7;//JLabelオブジェクトの宣言
       Ex7B_1(){               //Ex7B_1パネルの初期状態の設定
           setBackground(Color.white);//背景の設定
           setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));//配置方式
           l7 = new JLabel();//JLabelオブジェクトの生成
           graph = new Graphinfo();//Graphinfoオブジェクトの生成
           graph2 = new GraphPanel(graph,this);//GraphPanelオブジェクトの生成
           graph3 = new InfoPanel(graph,graph2);//InfoPanelオブジェクトの生成
           p3 = new JPanel();//JPanelオブジェクトの生成
           p3.add(l7);//p3にl7を追加
           add(graph3);//graph3追加
           add(graph2);//graph2追加
           add(p3);//p3追加
       }
   }
   class InfoPanel extends JPanel{//数値入力のパネル
       Graphinfo graph;      //Graphinfoオブジェクトの宣言
       GraphPanel graph2;    //GraphPanelオブジェクトの宣言
       Listener2 listener2;  //Listener2オブジェクトの宣言
       JPanel p1;            //JPanelオブジェクトの宣言
       JTextField txt1,txt2,txt3,txt4,txt5,txt6,txt7,txt8;//JTextFieldオブジェクトの宣言
       JLabel l1,l2,l3,l4,l5,l6,l7,l8,l9;//JLabelオブジェクトの宣言
       JRadioButton rd1,rd2; //JRadioButtonオブジェクトの宣言
       JButton b1,b2;        //JButtonオブジェクトの宣言
       InfoPanel(Graphinfo g1,GraphPanel g2){//コンストラクタ
           graph = g1;       //Graphinfoオブジェクトの生成
           graph2 = g2;      //GraphPanelオブジェクトの生成
           listener2 = new Listener2();//Listener2オブジェクトの生成
           txt1 = new JTextField(10);//JTextFieldオブジェクトの生成
           txt2 = new JTextField(10);//JTextFieldオブジェクトの生成
           txt3 = new JTextField(10);//JTextFieldオブジェクトの生成
           txt4 = new JTextField(10);//JTextFieldオブジェクトの生成
           txt5 = new JTextField(10);//JTextFieldオブジェクトの生成
           txt6 = new JTextField(10);//JTextFieldオブジェクトの生成
           txt7 = new JTextField(10);//JTextFieldオブジェクトの生成
           txt8 = new JTextField(10);//JTextFieldオブジェクトの生成
           l1 = new JLabel("分割数:");//JLabelオブジェクトの生成
           l2 = new JLabel("関数:");//JLabelオブジェクトの生成
           l3 = new JLabel("周期:");//JLabelオブジェクトの生成
           l4 = new JLabel("初期位相:");//JLabelオブジェクトの生成
           l5 = new JLabel("定義域xの最小値:");//JLabelオブジェクトの生成
           l6 = new JLabel("xの最大値:");//JLabelオブジェクトの生成
           l7 = new JLabel("速度:");//JLabelオブジェクトの生成
           l8 = new JLabel("時間刻み:");//JLabelオブジェクトの生成
           l9 = new JLabel("時間ステップ:");//JLabelオブジェクトの生成
           b1 = new JButton("スタート");//JButtonオブジェクトの生成
           b2 = new JButton("ストップ");//JButtonオブジェクトの生成
           rd1 = new JRadioButton("sin",true);//JRadioButtonオブジェクトの生成
           rd2 = new JRadioButton("cos");//JRadioButtonオブジェクトの生成
           ButtonGroup grp = new ButtonGroup();//ButtonGroupオブジェクトの生成
           grp.add(rd1);      //ボタングループに登録
           grp.add(rd2);      //ボタングループに登録
           p1 = new JPanel();//JPanelオブジェクトの生成
           p1.add(rd1);      //パネルにラジオボタンをおく
           p1.add(rd2);      //パネルにラジオボタンをおく
           txt1.addActionListener(listener2);//リスナー登録
           txt2.addActionListener(listener2);//リスナー登録
           txt3.addActionListener(listener2);//リスナー登録
           txt4.addActionListener(listener2);//リスナー登録
           txt5.addActionListener(listener2);//リスナー登録
           txt6.addActionListener(listener2);//リスナー登録
           txt7.addActionListener(listener2);//リスナー登録
           txt8.addActionListener(listener2);//リスナー登録
           rd1.addActionListener(listener2);//リスナー登録
           rd2.addActionListener(listener2);//リスナー登録
           b1.addActionListener(listener2);//リスナー登録
           b2.addActionListener(listener2);//リスナー登録
           setLayout(new GridLayout(5,4));//配置方式
           add(l1);         //ラベルをおく
           add(txt1);        //テキストフィールドをおく
           add(l2);         //ラベルをおく
           add(p1);         //パネルをおく
           add(l3);         //ラベルをおく
           add(txt2);        //テキストフィールドをおく
           add(l4);         //ラベルをおく
           add(txt3);        //テキストフィールドをおく
           add(l5);         //ラベルをおく
           add(txt4);        //テキストフィールドをおく
           add(l6);         //ラベルをおく
           add(txt5);        //テキストフィールドをおく
           add(l7);         //ラベルをおく
           add(txt6);        //テキストフィールドをおく
           add(l8);         //ラベルをおく
           add(txt7);        //テキストフィールドをおく
           add(l9);         //ラベルをおく
           add(txt8);        //テキストフィールドをおく
           add(b1);         //ボタンをおく
           add(b2);         //ボタンをおく
       }
       class Listener2 implements ActionListener{//リスナークラス(内部クラス)
           public void actionPerformed(ActionEvent e){//イベントが起きたとき
               if(e.getSource() == b1){    //スタートボタンが押された場合
                   graph2.time1.setDelay((int)(graph.gettxt8()));//時間ステップ
                   graph2.time1.start();   //アニメーションスタート
               }else if (e.getSource() ==b2){//ストップボタンが押された場合
                   graph2.time1.stop();    //アニメーションストップ
               }
               float f;           //変数の宣言
               int RD = 0;        //cosかsinかの識別用
               try{
                   f = Float.valueOf(txt1.getText()).floatValue();//得た文字を数
                                                                 //値に変換
                   graph.settxt1(f);               //数値を別のクラスにいれる
               }catch(NumberFormatException e1){}//例外処理
               try{
                   f = Float.valueOf(txt2.getText()).floatValue();//得た文字を数
                                                                 //値に変換
                   if(f==0){                               //数値が0だった場合
                       JOptionPane.showMessageDialog(null,
                          "周期0は禁止です。勝手ながら360にさせて頂きます。",
                          "Error!",JOptionPane.ERROR_MESSAGE);//エラーメッセージ
                                                              //表示
                       f = 360;      //数値を360にする
                   }
                   graph.settxt2(f);               //数値を別のクラスにいれる
               }catch(NumberFormatException e1){}//例外処理
               try{
                   f = Float.valueOf(txt3.getText()).floatValue();//得た文字を数
                                                                 //値に変換
                   graph.settxt3(f);               //数値を別のクラスにいれる
               }catch(NumberFormatException e1){}//例外処理
               try{
                   f = Float.valueOf(txt4.getText()).floatValue();//得た文字を数
                                                                 //値に変換
                   graph.settxt4(f);                //数値を別のクラスにいれる
               }catch(NumberFormatException e1){}//例外処理
               try{
                   f = Float.valueOf(txt5.getText()).floatValue();//得た文字を数
                                                                 //値に変換
                   graph.settxt5(f);              //数値を別のクラスにいれる
               }catch(NumberFormatException e1){}//例外処理
               try{
                   f = Float.valueOf(txt6.getText()).floatValue();//得た文字を数
                                                                 //値に変換
                   graph.settxt6(f);              //数値を別のクラスにいれる
               }catch(NumberFormatException e1){}//例外処理
               try{
                   f = Float.valueOf(txt7.getText()).floatValue();//得た文字を数
                                                                 //値に変換
                   graph.settxt7(f);              //数値を別のクラスにいれる
               }catch(NumberFormatException e1){}//例外処理
               try{
                   f = Float.valueOf(txt8.getText()).floatValue();//得た文字を数
                                                                 //値に変換
                   graph.settxt8(f);              //数値を別のクラスにいれる
               }catch(NumberFormatException e1){}//例外処理
               if(e.getSource() == rd1){      //rd1のラジオボタンが選択された場合
                   RD = 1;                          //RDに1を代入
                   graph.setRD(RD);              //数値を別のクラスにいれる
               }else if(e.getSource() == rd2){//rd2のラジオボタンが選択された場合
                   RD = 2;                          ////RDに2を代入
                   graph.setRD(RD);              //数値を別のクラスにいれる
               }
               graph2.repaint();//再描画
           }
       }
   }
   class Graphinfo{//情報を入れておくクラス
       private float txt1;       //データの初期値
       private float txt2 = 360; //データの初期値
       private float txt3 = 0;   //データの初期値
       private float txt4 = 0;   //データの初期値
       private float txt5 = 360; //データの初期値
       private float txt6 = 0; //データの初期値
       private float txt7 = 0; //データの初期値
       private float txt8 = 1; //データの初期値
       int RD = 1;              //データの初期値
       float gettxt1(){return txt1;}//データを得るメソッド
       float gettxt2(){return txt2;}//データを得るメソッド
       float gettxt3(){return txt3;}//データを得るメソッド
       float gettxt4(){return txt4;}//データを得るメソッド
       float gettxt5(){return txt5;}//データを得るメソッド
       float gettxt6(){return txt6;}//データを得るメソッド
       float gettxt7(){return txt7;}//データを得るメソッド
       float gettxt8(){return txt8;}//データを得るメソッド
       void settxt1(float TxT1){txt1 = TxT1;}//データの更新メソッド
       void settxt2(float TxT2){txt2 = TxT2;}//データの更新メソッド
       void settxt3(float TxT3){txt3 = TxT3;}//データの更新メソッド
       void settxt4(float TxT4){txt4 = TxT4;}//データの更新メソッド
       void settxt5(float TxT5){txt5 = TxT5;}//データの更新メソッド
       void settxt6(float TxT6){txt6 = TxT6;}//データの更新メソッド
       void settxt7(float TxT7){txt7 = TxT7;}//データの更新メソッド
       void settxt8(float TxT8){txt8 = TxT8;}//データの更新メソッド
       void setRD(int rd){RD = rd;}      //データの更新メソッド
   }
   class GraphPanel extends JPanel{//グラフを表示するパネル
       Graphinfo graph;      //Graphinfoオブジェクトの宣言
       Ex7B_1 ex7;           //Ex7B_1オブジェクトの宣言
       float a1,a2,a3,a4,a5; //変数の宣言
       int TM;               //変数の宣言
       float t = 0;          //変数の宣言
       Listener3 listener;   //Listener3オブジェクトの宣言
       Listener1 listener2;   //Listener3オブジェクトの宣言
       Listener4 listener4;   //Listener4オブジェクトの宣言
       Timer time1;
       GraphPanel(Graphinfo g,Ex7B_1 g2){//コンストラクタ
           graph = g;        //Graphinfoオブジェクトの生成
           ex7 = g2;         //Ex7B_1オブジェクトの生成
           listener = new Listener3();//Listener3オブジェクトの生成
           listener2 = new Listener1();//Listener3オブジェクトの生成
           listener4 = new Listener4();//Listener4オブジェクトの生成
           TM = (int)(graph.gettxt8());//データの取得
           time1 = new Timer(TM,listener4);//timer登録
           setBackground(Color.white);//背景の設定
           setMinimumSize(new Dimension(250,125));//パネルのサイズ設定
           setPreferredSize(new Dimension(440,220));//パネルのサイズ設定
           addMouseListener(listener);//イベントリスナーに登録
           addMouseMotionListener(listener2);//イベントリスナー登録
       }
       public void paintComponent(Graphics g){//図形と文字を書くメソッドに再定義
           double [] x = new double[(int)(graph.gettxt1())+1];//x座標の配列
                                                             //(途中計算用)
           double [] y = new double[(int)(graph.gettxt1())+1];//y座標の配列
                                                             //(途中計算用)
           int [] x2 = new int[(int)(graph.gettxt1())+1];//x座標の配列
           int [] y2 = new int[(int)(graph.gettxt1())+1];//y座標の配列
           super.paintComponent(g);//親クラスのメソッドの使用
           Dimension d = getSize();//ウィンドウサイズの取得
           double z = (d.width-40)/(Math.PI*(graph.gettxt5()-graph.gettxt4())/180);
                                                                    //定義域の調整
           if(graph.RD == 1){//sinの場合
               for(int i =0;i<=graph.gettxt1();i++){//iが0からtxt1までの間繰り返し
                   x[i] = (Math.PI*(graph.gettxt5()-graph.gettxt4())/180)*i
                                                     /graph.gettxt1();//x座標の計算
                   y[i] = Math.sin(2*Math.PI/(Math.PI*graph.gettxt2()/180)*(x[i]
                           -(Math.PI*graph.gettxt6()*t/180)+(Math.PI*graph.gettxt4()
                           /180)+(Math.PI*graph.gettxt3()/180)));//y座標の計算
                   x2[i] = (int)(z*x[i]+20);//x座標
                   y2[i] = (int)(-y[i]*(d.height-40)/2+(d.height-40)/2+20);//y座標
               }
           }else if(graph.RD == 2){//cosの場合
               for(int i =0;i<=graph.gettxt1();i++){//iが0からtxt1までの間繰り返し
                   x[i] = (Math.PI*(graph.gettxt5()-graph.gettxt4())/180)*
                                                    i/graph.gettxt1();//x座標の計算
                   y[i] = Math.cos(2*Math.PI/(Math.PI*graph.gettxt2()/180)*(x[i]
                           -(Math.PI*graph.gettxt6()*t/180)+(Math.PI*graph.gettxt4()
                           /180)+(Math.PI*graph.gettxt3()/180)));//y座標の計算
                   x2[i] = (int)(z*x[i]+20);//x座標
                   y2[i] = (int)(-y[i]*(d.height-40)/2+(d.height-40)/2+20);//y座標
               }
           }
           for(int j =0;j<graph.gettxt1();j++){//jが0からtxt1までの間繰り返し
               g.drawLine(x2[j],y2[j],x2[j+1],y2[j+1]);//線を描画
           }
           g.drawRect(20,20,(d.width-40),(d.height-40));//枠を描画
           g.drawLine(20,d.height/2,d.width-20,d.height/2);//y=0の線の描画
           g.drawLine(d.width/2,d.height/2-10,d.width/2,d.height/2+10);//目盛り
                                                                       //の描画
           g.setFont(new Font("TimesRoman",Font.ITALIC,10));//フォントの設定
           FontMetrics metrics = g.getFontMetrics();//FontMetricsオブジェクトの生
           String string1 = "1.0";//文字列の作成
           int ascent = metrics.getAscent();//文字の高さの測定
           int width1 = metrics.stringWidth(string1);//文字の幅の測定
           String string2 = Float.toString(graph.gettxt4());//文字列の作成
           String string3 = "-1.0";//文字列の作成
           String string4 = Float.toString(graph.gettxt5());//文字列の作成
           int width2 = metrics.stringWidth(string2);//文字の幅の測定
           int width3 = metrics.stringWidth(string3);//文字の幅の測定
           int width4 = metrics.stringWidth(string4);//文字の幅の測定
           g.drawString(string1,0,20);//文字を書く
           g.drawString(string2,0,d.height/2+ascent);//文字を書く
           g.drawString(string3,0,d.height-20+ascent);//文字を書く
           g.drawString(string4,d.width-20-15,d.height/2+ascent);//文字を書く
       }
       class Listener3 extends MouseAdapter{//リスナークラス(内部クラス)
           public void mouseClicked(MouseEvent e){//マウスがクリックされた場合
               if(javax.swing.SwingUtilities.isLeftMouseButton(e)){//クリックさ
                                                                   //れたのが左
                                                                   //ボタンの場合
                   float f1 = (graph.gettxt5()-graph.gettxt4())/2+graph.gettxt4();
                                                                   //定義域調整
                   graph.settxt5(f1);              //数値を別のクラスにいれる
                   repaint();                     //再描画
               }else if(javax.swing.SwingUtilities.isRightMouseButton(e)){
                                                              //クリックされたのが
                                                              //右ボタンの場合
                   float f2 = (graph.gettxt5()-graph.gettxt4())*2+graph.gettxt4();
                                                              //定義域調整
                   graph.settxt5(f2);              //数値を別のクラスにいれる
                   repaint();                     //再描画
               }
           }
       }
       class Listener1 extends MouseMotionAdapter{//リスナークラス(内部クラス)    
           public void mouseMoved(MouseEvent e){//マウスが動くときのメソッド
               Dimension d = getSize();//パネルの大きさをえる
               float a5 = graph.gettxt5();//グラフのx最大値
               float a4 = graph.gettxt4();//グラフのx最小値
               float y1 = d.height;       //パネルの高さ
               float X1 = (e.getX()-20)*(a5-a4)/(d.width-40)+a4;//ポインタのx座標
               float Y1 = (y1/2-e.getY())/((d.height-40)/2);//ポインタのy座標
               ex7.l7.setText("("+X1+","+Y1+")");//位置表示
           }
       }
       class Listener4 implements ActionListener{//リスナークラス(内部クラス)
           public void actionPerformed(ActionEvent e){//イベントが起きた場合
               t = t+graph.gettxt7();   //更新式
               repaint();                             //再描画
           }
       }
   }

CONTENTS

最新の20件

2020-11-14 2005-12-06 2006-11-04 2012-07-15 2009-06-19 2011-03-03 2006-12-13 2007-11-05 2014-07-22 2014-07-19 2014-07-09 2014-01-14 2012-09-03 2012-03-28

今日の11件

人気の30件

  • counter: 2412
  • today: 1
  • yesterday: 2
  • online: 1