まずは,もっとも単純に円や四角形を書いてみます。
Windowシステムにはいろいろ面倒な事があります。windowはユーザーの操作により上下が変わりますから,再び上になったときに再描画が必要になります。ここでのやり方はこのことを考慮していませんのでswingの使い方として正しくありません。
import java.awt.*; import javax.swing.*; import java.awt.event.*; public class DrawTest extends JFrame implements ActionListener{ JButton mybtn; JPanel mypnl; public DrawTest() { setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加 setSize(400,300); setTitle("クリックで描画"); mybtn = new JButton("draw"); mypnl = new JPanel(); mypnl.setBackground(Color.white); setLayout(new BorderLayout()); add(mypnl, BorderLayout.CENTER); add(mybtn,BorderLayout.SOUTH); mybtn.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == mybtn) { Graphics myg = mypnl.getGraphics(); myg.setColor(new Color(0,0,255)); for(int i=0; i*2<300; i=i+10){ myg.drawOval(i*2,i,20,10); } } } public static void main(String[] args){ DrawTest myframe = new DrawTest(); } }
実行するとボタン付きの枠だけができます。ボタンをクリックすることで楕円をたくさん表示します。
drawOval の代わりに、drawRect を使えば四角形を描くことができますし、fillOval を使えば、塗りつぶした楕円を描くことができます。
myg.drawRect(30,40,50,60); //(30,40)の所に、幅50、高さ60の四角を描く
次を試してください。
drawLine(int x1,int y1,int x2,int y2) |
直線を引く |
drawRect(int x,int y,int width,int height) |
長方形を描画 |
drawOval(int x,int y,int width,int height) |
楕円を描画 |
setColor(Color color) |
描画に使う色を設定する |
fillRect(int x,int y,int width,int height) |
長方形を塗りつぶす |
fillOval(int x,int y,int width,int height) |
楕円を塗りつぶす |
drawString(String str,int x,int y) |
文字列を描画する |
drawLine
メソッドは直線の始点(x1,y1)、終点(x2,y2)を引数として指定します。 引数がx,y,width,heightであるものはx,yを左上の角とする幅w高さhの四角形の中に長方形や楕円を描きます。
Javaを始め、多くのプログラム言語では、描画位置指定の座標は左上が(0,0)になります。
Windowsが他のWindowの下になって隠れ、再び上になったときに描いた画がなくなります。(drawボタンで再描画されます)
Windowの大きさを変える場合も同様です。
しかし、ボタンの部分は元に戻っています。JPanelにもこの仕組みが備わっていますがそれを活かすには決まりにしたがった書き方をしなければなりません。これは次のページで学びます。
上記の DrawTest.java をつくり実行してみなさい
DrawTest.java のdrawOvalをdrawRectやfillOvalなどに変えたり,新たにforの外にdrawOvalなどを書いて,図形を増やしてみなさい