解答例 - 実習課題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) {
}
}
}
}

