トップ 新規 編集 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Swingの基本:GUI部品のイベント処理(マウス)

 マウスのイベント処理

マウスのイベント処理としては、MouseEventがあり、マウスクリックなどを処理するMouseListener、マウスの移動やドラッグを扱うMouseMotionListener、マウスのホイールを扱うMouseWheelListenerがある。なお、MouseListenerは実装すべきメソッドが多く、implementしたクラスで実装すべきメソッドが多く煩雑なため、空のメソッドから構成されるMouseAdapterが用意されている。このクラスを継承することで、実装が必要なメソッドだけをオーバーライドすればよくなる。

マウスのイベント処理の例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package sample.swing.event;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

@SuppressWarnings("serial")
public class MouseEventSample extends JFrame {
    private TitledPanel clickPanel = new TitledPanel("マウスクリック");
    private TitledPanel movePanel = new TitledPanel("マウス移動");
    private TitledPanel dragPanel = new TitledPanel("マウスドラッグ");
    private TitledPanel wheelPanel = new TitledPanel("マウスホイール");
    private class TitledPanel extends JPanel {
        private JLabel label = new JLabel("○");
        public TitledPanel(String title) {
            setBorder(new TitledBorder(BorderFactory.createEtchedBorder(),title));
            label.setFont(new Font(label.getFont().getFamily(),label.getFont().getStyle(),24));
            add(label);
        }
        public JLabel getLabel() {
            return label;
        }
    }
    public MouseEventSample() {
        super("マウスイベントサンプル");
        setLayout(new GridLayout(2,2));
        //クリック関係
        clickPanel.addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e) {
                JLabel l = clickPanel.getLabel();
                l.setLocation(e.getX(), e.getY()-(l.getHeight()/2));
            }
        });
        //移動関係
        movePanel.addMouseMotionListener(new MouseMotionListener(){
            @Override
            public void mouseDragged(MouseEvent e) {}
            @Override
            public void mouseMoved(MouseEvent e) {
                JLabel l = movePanel.getLabel();
                l.setLocation(e.getX(), e.getY()-(l.getHeight()/2));
            }
            
        });
        //ドラッグ関係
        dragPanel.addMouseMotionListener(new MouseMotionListener(){
            @Override
            public void mouseDragged(MouseEvent e) {
                JLabel l = dragPanel.getLabel();
                l.setLocation(e.getX(), e.getY()-(l.getHeight()/2));
            }
            @Override
            public void mouseMoved(MouseEvent e) {
            }
        });
        //ホイール関係
        wheelPanel.addMouseWheelListener(new MouseWheelListener(){
            @Override
            public void mouseWheelMoved(MouseWheelEvent e) {
                JLabel l = wheelPanel.getLabel();
                int size = l.getFont().getSize();
                size=size+e.getWheelRotation();
                if(size<1) {
                    size = 1;
                }
                l.setFont(new Font(l.getFont().getFontName(),Font.PLAIN,size));
                l.setPreferredSize(new Dimension(size,size));
            }
        });
        add(clickPanel);
        add(movePanel);
        add(dragPanel);
        add(wheelPanel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ×を押したときに終了するように
        setSize(600, 400);
        setVisible(true);
    }
    public static void main(String[] args) {
        new MouseEventSample();
    }
}

 課題

  1. 上記の例において、マウスクリックエリアをクリックしたときのJPanel内の座標をウィンドウタイトルに表示するような修正を加えなさい。
  2. 上記の例において、マウスホイールエリアでホイールを回したさいに表示されるJLabelの色が変更されるような修正を加えなさい。
MouseEventSample.java

最終更新時間:2008年07月03日 08時54分46秒