コンテナ内のコンポーネントをマウスでドラッグする

戻る



::::::::::::::
ComponentDragger.java
::::::::::::::
import java.awt.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.geom.*;
import java.awt.image.*;

import javax.imageio.*;

import javax.swing.event.*;
import javax.swing.*;
import javax.swing.border.*;

import java.io.*;

/**
* $Id: ComponentDragger.html,v 1.1 2009/06/22 16:11:40 kishi Exp kishi $
* @author KISHI Yasuhiro
*/

public class ComponentDragger extends MouseMotionAdapter {

    private Point point = null;

    public ComponentDragger() {
        super();
        point = new Point();
    }

    public void mouseDragged( MouseEvent e ) {
        JComponent component = ( JComponent ) e.getSource();
        Container container = component.getParent();

        // System.out.println( "DRAGGED... " + component.getClass().getName() );

        // コンテナ内の絶対座標を求める
        point.x = e.getX() + component.getX();
        point.y = e.getY() + component.getY();

        component.setLocation( point );

    }
}

::::::::::::::
Draggable.java
::::::::::::::
import java.awt.*;
import java.awt.event.*;

/**
* $Id: ComponentDragger.html,v 1.1 2009/06/22 16:11:40 kishi Exp kishi $
*/

public interface Draggable extends ActionListener {

    public void move();
}
::::::::::::::
MyFrame.java
::::::::::::::
import java.awt.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.geom.*;
import java.awt.image.*;

import javax.imageio.*;

import javax.swing.event.*;
import javax.swing.*;
import javax.swing.border.*;

import java.io.*;

/**
* $Id: ComponentDragger.html,v 1.1 2009/06/22 16:11:40 kishi Exp kishi $
* @author KISHI Yasuhiro
*/

public class MyFrame extends JFrame {

    public MyFrame() {
        super( "コンテナ内のコンポーネントをマウスでドラッグする" );

        setBounds( 0, 0, 480, 320 );

        setLayout( new FlowLayout() );

        try {
            // 外観を設定します
            UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" );
            // 外観を変更します
            SwingUtilities.updateComponentTreeUI( this );
        } catch ( Exception e ) {
            e.printStackTrace();
            System.exit( -1 );
        }

        setBackground( Color.white );

        MyPanel panel = new MyPanel();
        panel.setPreferredSize( new Dimension( 640, 480 ) );

        JScrollPane sPane = new JScrollPane();
        sPane.getViewport().setView( panel );
        sPane.setPreferredSize( new Dimension( 384, 256 ) );

        Container container = getContentPane();
        container.add( sPane );

        setVisible( true );
        //pack();

        addWindowListener( new WindowAdapter() {
                               public void windowClosing( WindowEvent event ) {
                                   dispose();
                                   System.exit( 0 );
                               }
                           }
                         );

    }

    public static void main( String[] args ) {

        new MyFrame();
    }

}


::::::::::::::
MyPanel.java
::::::::::::::
import java.awt.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.geom.*;
import java.awt.image.*;

import javax.imageio.*;

import javax.swing.event.*;
import javax.swing.*;
import javax.swing.border.*;

import java.io.*;

/**
* $Id: ComponentDragger.html,v 1.1 2009/06/22 16:11:40 kishi Exp kishi $
* @author KISHI Yasuhiro
*/

public class MyPanel extends JPanel {

    private BufferedImage image = null;
    private boolean isDragged = false;

    public MyPanel() {
        super();

        setToolTipText( "スクロールできます" );

        setBackground( Color.cyan );

        setLayout( null );

        JButton button = new JButton( "ボタン" );
        button.setBounds( 100, 100, 100, 50 );
        this.add( button );

        button.addMouseMotionListener( new ComponentDragger() );
    }

}
戻る inserted by FC2 system