クリック時の処理(2)
つぎのようなプログラムを書きます。
マウスのボタンがどのピースの位置で押されたか判定し、 そのピースの位置を四角く塗りつぶします。
数字6のところで押されたらこのように表示される。
マウスが押されたときの処理はmousePressedに書き、 表示の処理はpaintComponentに書きます。
処理に必要なデータは属性値(インスタンス変数の値)として記憶します。
クリックされた位置により cx, cy の値を次のように設定することにします。
次に、paintComponent内でこの値を使って 長方形を描きます。
数字6のところで押されたときは
- cx = 2
- cy = 1
となり、上の実行例のようになります。
演習
?の2箇所を書き、プログラムを完成させなさい。
1 import javax.swing.*; 2 import java.awt.*; 3 import java.awt.event.*; 4 5 public class Game4 extends JPanel implements MouseListener 6 { 7 Image img; 8 int cx, cy; 9 10 Game4() 11 { 12 ImageIcon ii = new ImageIcon("game0.png"); 13 img = ii.getImage(); 14 addMouseListener(this); 15 } 16 17 public void paintComponent(Graphics g) 18 { 19 g.drawImage(img, 0,0, this); 20 g.setColor(Color.blue); 21 g.fillRect(cx*100, cy*100, 100, 100); 22 } 23 24 public void mousePressed(MouseEvent e) 25 { 26 int x, y; 27 x = e.getX(); 28 y = e.getY(); 29 cx = ? ; 30 cy = ? ; 31 repaint(); 32 } 33 public void mouseEntered(MouseEvent e) { } 34 public void mouseExited(MouseEvent e) { } 35 public void mouseReleased(MouseEvent e) { } 36 public void mouseClicked(MouseEvent e) { } 37 38 public static void main(String[] args) 39 { 40 JFrame f; 41 42 f = new JFrame(); 43 f.setVisible(true); 44 f.setTitle("15Game"); 45 f.setSize(420, 450); 46 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 47 f.add( new Game4() ); 48 } 49 }