Javaプログラミング 第11回 2005/11/24
グラフィックスプログラム
- 継承などを確認する。
演習
GraphicsクラスのメソッドはAPIのホームページで探してください。
- 配布したプリントのプログラムを入力、実行し動作を確認・理解する。
- 一定間隔で直線を水平、垂直方向に描画する。
- ランダムな位置、長さ、色の線を100個描画する。
- ランダムな位置、大きさ、色の長方形を100個描画する。
- ランダムな位置、半径と色の円を100個描画する。
- その他、自分で考えたもの
- ドラえもん
MyFrame?クラス
終了ボタンのみがあり、そのボタンをクリックするとプログラムの実行が終了する。
import java.awt.*; import java.awt.event.*; import javax.swing.*; /** ベースとなるフレームクラス */ public class MyFrame extends JFrame implements ActionListener { /** 終了ボタン */ JButton quitBtn; /** 描画用パネル */ JPanel panel; JPanel topPanel; /** このフレームのコンストラクタ */ public MyFrame(String title) { // スーパークラスコンストラクタを利用 super(title); // このフレームのサイズを指定 400×400 this.setSize(400, 400); // 終了ボタンの作成 quitBtn = new JButton("終了"); // 終了ボタンの動作をこのクラスで定義する quitBtn.addActionListener(this); // パネルの作成 panel = new JPanel(); topPanel=new JPanel(); panel.setBackground(new Color(255,255,255)); // このフレームにボタンとパネルを追加 getContentPane().add(quitBtn, BorderLayout.SOUTH); getContentPane().add(topPanel, BorderLayout.NORTH); getContentPane().add(panel, BorderLayout.CENTER); // ウィンドウを閉じたらアプリケーションも閉じるようにする setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } /** このクラスでのイベント処理 */ public void actionPerformed(ActionEvent ae) { // ボタンquitBtnが押されたときの処理を定義 if (ae.getSource().equals(quitBtn)) { // プログラムを終了 System.exit(1); } } }
MyFrame?クラスのテスト
MyFrame?クラスを継承したTest01クラス。左上から右下に向かって直線を描画する機能を追加した。
import java.awt.*; import java.awt.event.*; import javax.swing.*; /** MyFrameクラスを継承したクラスTest01 */ public class Test01 extends MyFrame { /** 直線描画用ボタン */ JButton drawLine; public static void main(String[] args) { // このクラスのオブジェクトを生成 Test01 myWin = new Test01("直線描画"); // フレームを表示する myWin.setVisible(true); } /** コンストラクタ */ public Test01(String title) { // スーパークラスのコンストラクタを実行 super(title); // 描画用ボタンの生成 drawLine = new JButton("直線描画"); // 直線描画用ボタンを押したとき箱のクラスの処理用メソッドを使う drawLine.addActionListener(this); // 直線描画用ボタンをパネルに追加 super.topPanel.add(drawLine); } /** イベント処理 */ public void actionPerformed(ActionEvent ae) { // スーパークラスの同名メソッドがオーバーライドされてしまうので // スーパークラスの同名メソッドの呼び出し super.actionPerformed(ae); // drawaLineボタンを押したときの処理 if(ae.getSource().equals(drawLine)) { // 描画対象のグラフィックス領域の取得 Graphics myGrp = super.panel.getGraphics(); // 描画色を青に設定 myGrp.setColor(new Color(0,0,255)); // 原点(0,0)からパネルの右下へ直線を描画 myGrp.drawLine(0,0,super.panel.getWidth(), panel.getHeight()); } } }