From window, to wind

趣味のゲームとJavaプログラムなどについて 適当に書き綴るブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Windowをドラッグで動かすJLabel

コンストラクターに動かしたいWindow(JFrameやJDialogなど)を渡し、ラベルをドラッグすることでWindowを動かすことができます。

ソースコード


package program;

import java.awt.Dimension;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JLabel;

public class MovePanel extends JLabel
   implements MouseListener, MouseMotionListener{

    private Point pnow,p0,p1;
    private Window window;
   
    MovePanel(Window win, Dimension width){
        window=win;
        setPreferredSize(width);
        addMouseListener((MouseListener) this);
        addMouseMotionListener((MouseMotionListener) this);
        setToolTipText("ドラッグして移動");
       
    }
   
    public void mouseExited(MouseEvent me) {   
    }

    public void mousePressed(MouseEvent me) {
        p0=me.getPoint();   
    }

    public void mouseReleased(MouseEvent me) {
    }

    public void mouseDragged(MouseEvent me) {
        p1=me.getPoint();
        pnow=window.getLocation();
        window.setLocation(pnow.x+p1.x-p0.x,pnow.y+p1.y-p0.y);
    }

    public void mouseMoved(MouseEvent me) {   
    }

    public void mouseClicked(MouseEvent arg0) {   
    }

    public void mouseEntered(MouseEvent arg0) {   
    }


}



解説
主な動作としてはコンストラクターで受け取ったWindowの座標とラベルの座標を使います。
まずマウスをプレスした時のラベル中での座標をp0として受け取り、ドラッグすることでラベル中での座標が移動しp1となります。そこでWindowの座標を読み取りp1とp0の座標の差の分だけ動かします。これによりp0とp1の座標が等しくなります。

マウスプレス

ラベル中での座標p0を受け取る

マウスドラッグ

移動したマウスのラベル中での座標p1を受け取る。

p1がp0の位置にくるようにWindowの座標を変更する。

マウスドラッグ

続く

すこし変わった処理ですが、Windowのタイトルバーなどを消したいときに使えます。あとクラスの名前がPanelとなっているのはもともとJPanelで作っていたものを、文字を表示したいのでJLabelに変更した名残です。
スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://kagenyan.blog69.fc2.com/tb.php/24-2d0cbaab
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。