●前回つくったパネルにいろいろなものを配置していきます。今後この部分に変更が加えられ、他の部分はあまり変わりませんので、パネルの部分をまとめておきます。
●いろいろなやり方がありますが、ここでは内部クラスとして独立させます。赤い部分と青い部分が書き加えられた所です。緑の部分にも注意してください。同じになるように書き換えなければなりません。
●次のプログラムは前回のものと実行結果は同じです。
/** * パネルを用意して色を付ける (パネルを内部クラスに) */ import javax.swing.*; import java.awt.*; // for Color Container public class PanelTest2 extends JFrame{ /* コンストラクタ */ public PanelTest2(){ /* サイズと位置を指定 */ setSize(400, 300); /* 終了処理を追加 */ setDefaultCloseOperation(EXIT_ON_CLOSE); /* パネルをつくる */ MyJPanel panel01 = new MyJPanel(); /* パネルに色を指定 この部分はMyJPanelに移動*/ //panel01.setBackground(Color.blue); /* コンテナ取得 */ Container cn = getContentPane(); /* パネルをコンテナに貼る*/ cn.add(panel01); /* 実際に表示する */ setVisible(true); } /********* main **********/ public static void main(String[] args){ /* フレームを作成 */ PanelTest2 frame1 = new PanelTest2(); } /* パネルを作るクラス */ public class MyJPanel extends JPanel{ /* コンストラクタ */ public MyJPanel(){ /* パネルに色を指定 */ setBackground(Color.blue); } } }
●上記プログラムをつくりなさい。
●上記のプログラムの class MyJPanel に次のように書き加えるとパネル上に文字を書くことができる。いろいろ試してどういう仕組みか探りなさい。コピーして書き加える場合、PanelTest2 から PanelTest3 への書き換えは4カ所必要です。
public class MyJPanel extends JPanel{ /* コンストラクタ */ public MyJPanel(){ /* パネルに色を指定 */ setBackground(Color.blue); } public void paintComponent(Graphics g){ super.paintComponent(g); g.drawString("x=20 y=40 に文字を書く",20,40); Font font1 = new Font("Serif", Font.PLAIN, 24); g.setFont(font1); g.setColor(Color.yellow); g.drawString("フォントを指定して文字を書く",20,80); } }
●paintComponent は描画が必要なときに自動的に呼び出されるメソッドである。これは余り気にしないこと
●"Serif" には Monospaced SansSerif Symbol Dialog Default などが使えます。
●PLAIN の他に、ITALIC や BOLD が使えます。両方指定するには、Font.BOLD|Font.ITALIC とします。