解答例 - 実習課題3 - 12.描画
(実習課題3)
以下のプログラムを作成しなさい。
- ウィンドウに含まれるコンポーネントはパネルのみ。
- パネルには最初何も表示されないが、マウスのボタンを押すとその位置にイメージを表示する事。
- マウスをドラッグしていくと、イメージはマウスに合わせて移動するようにする事。
- ボタンを離すとイメージは消える事。
- (ヒント)「MouseMotionListener」を利用する。
/** * ImageMovingFrame.java * TECHSCORE Javaユーザインタフェース12章 実習課題3 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.ui.chapter12.exercise3; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class ImageMovingFrame extends JFrame { public ImageMovingFrame() { super("ImageMovingFrame"); setDefaultCloseOperation(EXIT_ON_CLOSE); ImageMovingPanel panel = new ImageMovingPanel(); panel.setPreferredSize(new Dimension(300, 300)); getContentPane().add(panel, BorderLayout.CENTER); pack(); } public static void main(String args[]) { new ImageMovingFrame().setVisible(true); } private class ImageMovingPanel extends JPanel { private ImageIcon icon = new ImageIcon("com/techscore/ui/chapter12/exercise3/4dd.gif"); private int mouseX = 0; private int mouseY = 0; private boolean isMousePressed = false; public ImageMovingPanel() { super(); ImageMovingMouseAdapter mouseAdapter = new ImageMovingMouseAdapter(); addMouseListener(mouseAdapter); addMouseMotionListener(mouseAdapter); } public void paint(Graphics g) { // 背景をクリア Dimension dim = getSize(); g.setColor(getBackground()); g.fillRect(0, 0, dim.width, dim.height); if (isMousePressed) { g.drawImage(icon.getImage(), mouseX, mouseY, this); } } private class ImageMovingMouseAdapter extends MouseAdapter implements MouseMotionListener { public void mousePressed(MouseEvent e) { isMousePressed = true; mouseX = e.getX(); mouseY = e.getY(); repaint(); } public void mouseReleased(MouseEvent e) { isMousePressed = false; } public void mouseDragged(MouseEvent e) { mouseX = e.getX(); mouseY = e.getY(); repaint(); } public void mouseMoved(MouseEvent e) { } } } }