目次へ

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

        }

    }

}

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp