精华内容
下载资源
问答
  • package yan.wen.test;...import java.awt.*;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class DraggedTest extends JFrame {private final JPanel panel_1;pr...

    package yan.wen.test;

    import javax.swing.*;

    import java.awt.*;

    import java.awt.event.MouseAdapter;

    import java.awt.event.MouseEvent;

    public class DraggedTest extends JFrame {

    private final JPanel panel_1;

    private final JPanel panel_2;

    private final JPanel panel_3;

    private final JPanel panel_4;

    private JPanel contentPane;

    public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {

    public void run() {

    try {

    DraggedTest frame = new DraggedTest();

    frame.setVisible(true);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    });

    }

    public DraggedTest() {

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setSize(660, 500);

    setLocationRelativeTo(null);

    contentPane = new JPanel();

    contentPane.setLayout(new BorderLayout());

    add(contentPane);

    JPanel panel = new JPanel();

    contentPane.add(panel, BorderLayout.CENTER);

    panel.setBorder(BorderFactory.createLineBorder(Color.orange, 2));

    panel.setLayout(null);

    panel_1 = new JPanel();

    panel_1.setBackground(Color.GRAY);

    panel_1.setBounds(82, 85, 130, 130);

    panel.add(panel_1);

    panel_2 = new JPanel();

    panel_2.setBackground(Color.LIGHT_GRAY);

    panel_2.setBounds(261, 85, 130, 130);

    panel.add(panel_2);

    panel_3 = new JPanel();

    panel_3.setBackground(Color.MAGENTA);

    panel_3.setBounds(450, 85, 130, 130);

    panel.add(panel_3);

    panel_4 = new JPanel();

    panel_4.setBackground(Color.ORANGE);

    panel_4.setBounds(261, 285, 130, 130);

    panel.add(panel_4);

    MyListener m = new MyListener();

    panel_1.addMouseListener(m);

    panel_1.addMouseMotionListener(m);

    panel_2.addMouseListener(m);

    panel_2.addMouseMotionListener(m);

    panel_3.addMouseListener(m);

    panel_3.addMouseMotionListener(m);

    panel_4.addMouseListener(m);

    panel_4.addMouseMotionListener(m);

    }

    // 写一个类继承鼠标监听器的适配器,这样就可以免掉不用的方法。

    class MyListener extends MouseAdapter{

    //这两组x和y为鼠标点下时在屏幕的位置和拖动时所在的位置

    int newX,newY,oldX,oldY;

    //这两个坐标为组件当前的坐标

    int startX,startY;

    @Override

    public void mousePressed(MouseEvent e) {

    //此为得到事件源组件

    Component cp = (Component)e.getSource();

    //当鼠标点下的时候记录组件当前的坐标与鼠标当前在屏幕的位置

    startX = cp.getX();

    startY = cp.getY();

    oldX = e.getXOnScreen();

    oldY = e.getYOnScreen();

    }

    @Override

    public void mouseDragged(MouseEvent e) {

    Component cp = (Component)e.getSource();

    //拖动的时候记录新坐标

    newX = e.getXOnScreen();

    newY = e.getYOnScreen();

    //设置bounds,将点下时记录的组件开始坐标与鼠标拖动的距离相加

    cp.setBounds(startX+(newX - oldX), startY+(newY - oldY), cp.getWidth(), cp.getHeight());

    }

    @Override

    public void mouseReleased(MouseEvent e) {

    Component cp = (Component)e.getSource();

    newX = e.getXOnScreen();

    newY = e.getYOnScreen();

    int x = cp.getX();

    int y = cp.getY();

    if (x < 0){

    x = 0+1;

    }

    if (y < 0){

    y = 0+1;

    }

    if (x > getWidth()-cp.getWidth()){

    x = getWidth()-cp.getWidth();

    }

    if (y > getHeight()-cp.getHeight()){

    y = getHeight()-cp.getHeight();

    }

    if (x != cp.getX() || y != cp.getY()){

    cp.setBounds(x, y, cp.getWidth(), cp.getHeight());

    }

    }

    }

    }

    展开全文
  • 在Swing中拖动一个组件以及截图,我们抛开定位布局不说,是件很容易的事情。拖动图片和拖动部件是同样的道理,如果您准备拖动一个组件,只要给插件增加两个器就可以了。一个是addMouseListener(MouseListener l),另...

    2-810-jpg_6-1080-0-0-1080.jpg

    在Swing中拖动一个组件以及截图,我们抛开定位布局不说,是件很容易的事情。拖动图片和拖动部件是同样的道理,如果您准备拖动一个组件,只要给插件增加两个器就可以了。一个是addMouseListener(MouseListener l),另一个是:addMouseMotionListener(MouseMotionListener l) ;由于MouseListener和MouseMotionListener都继承同一个父类EventListener,所以我们给模块提高器时,只要减少同一个器就可以了。即:

    DragPicListener listener = new DragPicListener();

    component.addMouseListener(listener);

    component.addMouseMotionListener(listener);

    对于器DragPicListenerswing组件集,我们即使实现鼠标按下时的触发事件public void mousePressed(MouseEvent e);和鼠标拖动时的触发事件:public void mouseDragged(MouseEvent e) ,就可以完成模块的拖动了。当鼠标按下时我们记录下鼠标的位置;当鼠标移动时,获得鼠标当前的位置,并把模块移动到当前位置。类程序如下:

    class DragPicListener extends MouseInputAdapter {

    /** 坐标点 */

    Point point = new Point(0, 0);

    /**

    * 当鼠标拖动时触发该事件。 记录下鼠标按下(开始拖动)的位置。

    */

    public void mouseDragged(MouseEvent e) {

    // 转换坐标系统

    Point newPoint = SwingUtilities.convertPoint(dragPicLabel, e

    .getPoint(), dragPicLabel.getParent());

    // 设置标签的新位置

    dragPicLabel.setLocation(dragPicLabel.getX()

    + (newPoint.x - point.x), dragPicLabel.getY()

    + (newPoint.y - point.y));

    // 更改坐标点

    point = newPoint;

    }

    /**

    * 当鼠标按下时触发该事件。 记录下鼠标按下(开始拖动)的位置。

    */

    public void mousePressed(MouseEvent e) {

    // 得到当前坐标点

    point = SwingUtilities.convertPoint(dragPicLabel, e.getPoint(),

    dragPicLabel.getParent());

    }

    }

    ad16da193df5548c91957fc417db47ff.png

    这里还必须解释一下的是:SwingUtilities.convertPoint这个办法,这个方式的机理和作用我单独写了一篇文章:《SwingUtilities.convertPoint 方法的作用》 ,请你们参考。

    附件是一个完整的程序,和一副图片,运行时请将demo.jpg拷贝到硬盘根目录,或者设置程序的截图模式。运行效果如下图:

    拖动图片前:

    demo1.png

    6-810-jpg_6-1080-0-0-1080.jpg

    拖动图片后:

    demo2.png

    文章地址:

    相关文章:wingUtilities.convertPoint 方法的作用:

    c1521a44082fd2cc7b63525652fcc589.png

    谈谈美国的程序员|SwingUtilities.convertPoint 方法的作用

    2 楼javapub2010-12-23

    lliiqiang 写道

    这也是你一厢情愿的看法.事件行为是交叉的,所以针对事件数据要独立隔离处理

    4e4d432257a3f86b9f7c9ccba84131d9.png

    能否说的更具体一些

    1 楼lliiqiang2010-12-21

    这也是你一厢情愿的看法.事件行为是交叉的swing组件集,所以针对事件数据要独立隔离处理

    您还没有登录,请您登录后再发表评论

    本文来自电脑杂谈,转载请注明本文网址:

    http://www.pc-fly.com/a/jisuanjixue/article-123064-1.html

    展开全文
  • 目标:在窗体上按下鼠标按键、然后拖动鼠标,在按下和拖动之间绘制曲线事件机制事件源对象:窗体事件监听方法:addMouseListener(MouseListener l);addMouseMotionListener(MouseMotionListener l);事件接口(事件...

    目标:在窗体上按下鼠标按键、然后拖动鼠标,在按下和拖动之间绘制曲线

    事件机制

    事件源对象:窗体

    事件监听方法:addMouseListener(MouseListener l);addMouseMotionListener(MouseMotionListener l);

    事件接口(事件处理类):MouseListener,MouseMotionListener

    实现步骤:

    1.定义DrawListener事件处理类,该类实现MouseListener和MouseMotionListener鼠标事件接口,实现接口中的抽象方法

    2.实例化DrawListener事件处理类的对象,然后给事件源对象this窗体对象添加鼠标动作监听方法和鼠标移动动作监听方法。

    3.在按下释放的方法中获取按下的坐标值,在拖动方法中获取拖动的坐标值,根据按下和拖动的坐标值来绘制曲线

    练习

    1.实现曲线、刷子、橡皮、喷枪

    实现的代码如下:

    /* 1.新建一个DrawListener事件处理类,该类实现MouseListener鼠标事件接口,实现接口中的抽象方法。

    2.定义四个变量,在按下和释放方法中获取按下和释放的坐标值。

    3.定义Grpahics画笔画布类的对象,调用绘制图形的方法来画图。

    我们的组件是画出来的,那么你要在哪一个组件上画图形,那你的画笔画布对象就从这个组件上获取。

    4.实例化DrawListener事件处理类的对象,对象名dl

    5.给事件源窗体对象添加addMouseListener()鼠标监听方法,指定事件处理类对象dl.

    */

    package wenya63;

    import java.awt.Color;

    import java.awt.FlowLayout;

    import java.awt.Graphics;

    import javax.swing.JButton;

    import javax.swing.JFrame;

    /**

    * 定义一个画图界面类,该类继承自JFrame窗体类

    */

    public class drawFrame extends JFrame {

    /**

    * 程序入口主函数

    */

    public static void main(String[] args) {

    // 实例化窗体类的对象,调用初始化界面的方法

    drawFrame df = new drawFrame();

    df.initUI();

    }

    /**

    * 自定义初始化界面的方法

    */

    public void initUI() {

    setTitle("图画");

    setSize(600, 500);

    setDefaultCloseOperation(3);

    setLocationRelativeTo(null);

    setLayout(new FlowLayout());

    getContentPane().setBackground(Color.cyan);//改变背景颜色的命令   注意:是要改变背景色,g.setColor(Color.pink)设置的是按钮框的颜色

    JButton butLine = new JButton("曲线");

    add(butLine);

    butLine.setBackground(Color.ORANGE);

    JButton butSharp = new JButton("刷子");

    add(butSharp);

    butSharp.setBackground(Color.ORANGE);

    JButton butAngle = new JButton("橡皮");

    add(butAngle);

    butAngle.setBackground(Color.ORANGE);

    JButton butHair = new JButton("喷枪");

    add(butHair);

    butHair.setBackground(Color.ORANGE);

    setVisible(true);

    //获取窗体上画笔画布对象(注意:必须要在窗体可见之后才能获取画笔画布对象,否则获取的是null)

    Graphics g = getGraphics();

    //4.实例化DrawListener事件处理类的对象,对象名dl

    drawListener dl = new drawListener();

    //5.给事件源窗体对象添加addMouseListener()鼠标监听方法,指定事件处理类对象dl.

    addMouseListener(dl);

    addMouseMotionListener(dl);

    //调用画图Graphics

    dl.setGraphics(g);

    //按钮的动作监听,按钮是事件源,也就是说只有当按下按钮才会执行画图的动作,可以参考登录界面的验证登录

    butLine.addActionListener(dl);

    butSharp.addActionListener(dl);

    butAngle.addActionListener(dl);

    butHair.addActionListener(dl);

    }

    }

    package wenya63;

    import java.awt.BasicStroke;

    import java.awt.Color;

    import java.awt.Graphics;

    import java.awt.Graphics2D;

    import java.awt.RenderingHints;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.awt.event.MouseEvent;

    import java.awt.event.MouseListener;

    import java.awt.event.MouseMotionListener;

    import java.util.Random;

    /**

    * 1.新建一个DrawListener和ActionListener事件处理类,

    * 该类实现MouseListener鼠标事件接口,MouseMotionListener和ActionListener接口,实现接口中的抽象方法。

    */

    public class drawListener implements MouseListener, MouseMotionListener,ActionListener {

    private int x1, y1, x2, y2;// 声明四个整数变量,用来记录按下和释放时的坐标值

    private Graphics g;// 声明一个画笔画布类的对象名

    private String type;

    // 向DrawFrame借画笔画布类的对象

    public void setGraphics(Graphics gra) {

    g = (Graphics2D) gra;//强制转型

    设置画笔抗锯齿

    ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,

    RenderingHints.VALUE_ANTIALIAS_ON);

    }

    /**

    * 当在事件源上按下鼠标按键然后拖动鼠标时执行的方法。

    */

    public void mouseDragged(MouseEvent e) {

    x2 = e.getX();

    y2 = e.getY();

    if (type.equals("曲线")) {

    g.setColor(Color.green);

    // 设置线条粗细

    ((Graphics2D) g).setStroke(new BasicStroke(5));

    g.drawLine(x1, y1, x2, y2);// 如果写成(x1,x2,y1,y2)就会使画的曲线只能是固定方向的曲线

    g.setColor(Color.BLACK);//恢复原来的颜色

    }

    x1 = x2;

    y1 = y2;

    if (type.equals("刷子")) {

    g.setColor(Color.pink);

    ((Graphics2D) g).setStroke(new BasicStroke(10));

    g.drawLine(x1, y1, x2, y2);

    g.setColor(Color.BLACK);//恢复原来的颜色

    }

    if (type.equals("橡皮")) {

    //注意要先设置颜色再画

    g.setColor(Color.white);

    ((Graphics2D) g).setStroke(new BasicStroke(30));

    g.drawLine(x1, y1, x2, y2);

    g.setColor(Color.BLACK);//恢复原来的颜色

    }

    if (type.equals("喷枪")) //难点

    {

    //设置线条粗细

    ((Graphics2D) g).setStroke(new BasicStroke(1));

    Random rand = new Random();//实例化一个随机数类的对象

    int size = rand.nextInt(50);//随机决定要画的点数

    for(int i=0;i

    {

    //在0-7之间可以取50次

    int x = rand.nextInt(8);

    int y = rand.nextInt(8);

    g.drawLine(x1+x, y1+y, x1+x, y1+y);//不断改变(x1,y1)的坐标值,实现在(x1,y1)的周围画点

    }

    }

    }

    /**

    * Invoked when the mouse cursor has been moved onto a component but no

    * buttons have been pushed.

    */

    public void mouseMoved(MouseEvent e) {

    }

    /**

    * 当你在事件源上发生鼠标点击动作时执行的方法。(在同一个位置上按下并释放才会执行点击)

    */

    public void mouseClicked(MouseEvent e) {

    }

    /**

    * 当你在事件源上发生鼠标按下动作时执行的方法。

    */

    public void mousePressed(MouseEvent e) {

    x1 = e.getX();

    y1 = e.getY();

    }

    /**

    * 当你在事件源上发生鼠标释放动作时执行的方法。

    */

    public void mouseReleased(MouseEvent e) {

    }

    /**

    * 当你的鼠标进入到事件源是行时执行的方法。

    */

    public void mouseEntered(MouseEvent e) {

    }

    /**

    * 当你的鼠标离开到事件源是行时执行的方法。

    */

    public void mouseExited(MouseEvent e) {

    }

    // 实现ActionListener的抽象方法

    public void actionPerformed(ActionEvent e) {//Fn+F3得知ActionListener与MouseListener, MouseMotionListener不同的

    type = e.getActionCommand();// ActionCommand获取按钮上的文字或者获取事件源对象

    }

    }

    运行结果:

    5bc938299240f796f3a3dfe9db36f722.png

    展开全文
  • 最初的Terai实现在TabbedPane中转移了选项卡,但是如果我可以从一个TabbedPane拖动到另一个,那就更好了。通过@启发汤姆的努力,我决定修改自己的代码。我添加了一些细节。例如,幽灵选项卡现在沿着选项卡式窗格滑动...

    小编典典

    我喜欢Terai Atsuhiro san的DnDTabbedPane,但我想要更多。最初的Terai实现在TabbedPane中转移了选项卡,但是如果我可以从一个TabbedPane拖动到另一个,那就更好了。

    通过@启发汤姆的努力,我决定修改自己的代码。我添加了一些细节。例如,幽灵选项卡现在沿着选项卡式窗格滑动,而不是与鼠标一起移动。

    setAcceptor(TabAcceptor

    a_acceptor)应该让使用者代码决定是否让一个选项卡从一个选项卡式窗格转移到另一个选项卡式窗格。默认接受器始终返回true。

    /** Modified DnDTabbedPane.java

    * http://java-swing-tips.blogspot.com/2008/04/drag-and-drop-tabs-in-jtabbedpane.html

    * originally written by Terai Atsuhiro.

    * so that tabs can be transfered from one pane to another.

    * eed3si9n.

    */

    import java.awt.*;

    import java.awt.datatransfer.*;

    import java.awt.dnd.*;

    import java.awt.geom.*;

    import java.awt.image.*;

    import javax.swing.*;

    public class DnDTabbedPane extends JTabbedPane {

    public static final long serialVersionUID = 1L;

    private static final int LINEWIDTH = 3;

    private static final String NAME = "TabTransferData";

    private final DataFlavor FLAVOR = new DataFlavor(

    DataFlavor.javaJVMLocalObjectMimeType, NAME);

    private static GhostGlassPane s_glassPane = new GhostGlassPane();

    private boolean m_isDrawRect = false;

    private final Rectangle2D m_lineRect = new Rectangle2D.Double();

    private final Color m_lineColor = new Color(0, 100, 255);

    private TabAcceptor m_acceptor = null;

    public DnDTabbedPane() {

    super();

    final DragSourceListener dsl = new DragSourceListener() {

    public void dragEnter(DragSourceDragEvent e) {

    e.getDragSourceContext().setCursor(DragSource.DefaultMoveDrop);

    }

    public void dragExit(DragSourceEvent e) {

    e.getDragSourceContext()

    .setCursor(DragSource.DefaultMoveNoDrop);

    m_lineRect.setRect(0, 0, 0, 0);

    m_isDrawRect = false;

    s_glassPane.setPoint(new Point(-1000, -1000));

    s_glassPane.repaint();

    }

    public void dragOver(DragSourceDragEvent e) {

    //e.getLocation()

    //This method returns a Point indicating the cursor location in screen coordinates at the moment

    TabTransferData data = getTabTransferData(e);

    if (data == null) {

    e.getDragSourceContext().setCursor(

    DragSource.DefaultMoveNoDrop);

    return;

    } // if

    /*

    Point tabPt = e.getLocation();

    SwingUtilities.convertPointFromScreen(tabPt, DnDTabbedPane.this);

    if (DnDTabbedPane.this.contains(tabPt)) {

    int targetIdx = getTargetTabIndex(tabPt);

    int sourceIndex = data.getTabIndex();

    if (getTabAreaBound().contains(tabPt)

    && (targetIdx >= 0)

    && (targetIdx != sourceIndex)

    && (targetIdx != sourceIndex + 1)) {

    e.getDragSourceContext().setCursor(

    DragSource.DefaultMoveDrop);

    return;

    } // if

    e.getDragSourceContext().setCursor(

    DragSource.DefaultMoveNoDrop);

    return;

    } // if

    */

    e.getDragSourceContext().setCursor(

    DragSource.DefaultMoveDrop);

    }

    public void dragDropEnd(DragSourceDropEvent e) {

    m_isDrawRect = false;

    m_lineRect.setRect(0, 0, 0, 0);

    // m_dragTabIndex = -1;

    if (hasGhost()) {

    s_glassPane.setVisible(false);

    s_glassPane.setImage(null);

    }

    }

    public void dropActionChanged(DragSourceDragEvent e) {

    }

    };

    final DragGestureListener dgl = new DragGestureListener() {

    public void dragGestureRecognized(DragGestureEvent e) {

    // System.out.println("dragGestureRecognized");

    Point tabPt = e.getDragOrigin();

    int dragTabIndex = indexAtLocation(tabPt.x, tabPt.y);

    if (dragTabIndex < 0) {

    return;

    } // if

    initGlassPane(e.getComponent(), e.getDragOrigin(), dragTabIndex);

    try {

    e.startDrag(DragSource.DefaultMoveDrop,

    new TabTransferable(DnDTabbedPane.this, dragTabIndex), dsl);

    } catch (InvalidDnDOperationException idoe) {

    idoe.printStackTrace();

    }

    }

    };

    //dropTarget =

    new DropTarget(this, DnDConstants.ACTION_COPY_OR_MOVE,

    new CDropTargetListener(), true);

    new DragSource().createDefaultDragGestureRecognizer(this,

    DnDConstants.ACTION_COPY_OR_MOVE, dgl);

    m_acceptor = new TabAcceptor() {

    public boolean isDropAcceptable(DnDTabbedPane a_component, int a_index) {

    return true;

    }

    };

    }

    public TabAcceptor getAcceptor() {

    return m_acceptor;

    }

    public void setAcceptor(TabAcceptor a_value) {

    m_acceptor = a_value;

    }

    private TabTransferData getTabTransferData(DropTargetDropEvent a_event) {

    try {

    TabTransferData data = (TabTransferData) a_event.getTransferable().getTransferData(FLAVOR);

    return data;

    } catch (Exception e) {

    e.printStackTrace();

    }

    return null;

    }

    private TabTransferData getTabTransferData(DropTargetDragEvent a_event) {

    try {

    TabTransferData data = (TabTransferData) a_event.getTransferable().getTransferData(FLAVOR);

    return data;

    } catch (Exception e) {

    e.printStackTrace();

    }

    return null;

    }

    private TabTransferData getTabTransferData(DragSourceDragEvent a_event) {

    try {

    TabTransferData data = (TabTransferData) a_event.getDragSourceContext()

    .getTransferable().getTransferData(FLAVOR);

    return data;

    } catch (Exception e) {

    e.printStackTrace();

    }

    return null;

    }

    class TabTransferable implements Transferable {

    private TabTransferData m_data = null;

    public TabTransferable(DnDTabbedPane a_tabbedPane, int a_tabIndex) {

    m_data = new TabTransferData(DnDTabbedPane.this, a_tabIndex);

    }

    public Object getTransferData(DataFlavor flavor) {

    return m_data;

    // return DnDTabbedPane.this;

    }

    public DataFlavor[] getTransferDataFlavors() {

    DataFlavor[] f = new DataFlavor[1];

    f[0] = FLAVOR;

    return f;

    }

    public boolean isDataFlavorSupported(DataFlavor flavor) {

    return flavor.getHumanPresentableName().equals(NAME);

    }

    }

    class TabTransferData {

    private DnDTabbedPane m_tabbedPane = null;

    private int m_tabIndex = -1;

    public TabTransferData() {

    }

    public TabTransferData(DnDTabbedPane a_tabbedPane, int a_tabIndex) {

    m_tabbedPane = a_tabbedPane;

    m_tabIndex = a_tabIndex;

    }

    public DnDTabbedPane getTabbedPane() {

    return m_tabbedPane;

    }

    public void setTabbedPane(DnDTabbedPane pane) {

    m_tabbedPane = pane;

    }

    public int getTabIndex() {

    return m_tabIndex;

    }

    public void setTabIndex(int index) {

    m_tabIndex = index;

    }

    }

    private Point buildGhostLocation(Point a_location) {

    Point retval = new Point(a_location);

    switch (getTabPlacement()) {

    case JTabbedPane.TOP: {

    retval.y = 1;

    retval.x -= s_glassPane.getGhostWidth() / 2;

    } break;

    case JTabbedPane.BOTTOM: {

    retval.y = getHeight() - 1 - s_glassPane.getGhostHeight();

    retval.x -= s_glassPane.getGhostWidth() / 2;

    } break;

    case JTabbedPane.LEFT: {

    retval.x = 1;

    retval.y -= s_glassPane.getGhostHeight() / 2;

    } break;

    case JTabbedPane.RIGHT: {

    retval.x = getWidth() - 1 - s_glassPane.getGhostWidth();

    retval.y -= s_glassPane.getGhostHeight() / 2;

    } break;

    } // switch

    retval = SwingUtilities.convertPoint(DnDTabbedPane.this,

    retval, s_glassPane);

    return retval;

    }

    class CDropTargetListener implements DropTargetListener {

    public void dragEnter(DropTargetDragEvent e) {

    // System.out.println("DropTarget.dragEnter: " + DnDTabbedPane.this);

    if (isDragAcceptable(e)) {

    e.acceptDrag(e.getDropAction());

    } else {

    e.rejectDrag();

    } // if

    }

    public void dragExit(DropTargetEvent e) {

    // System.out.println("DropTarget.dragExit: " + DnDTabbedPane.this);

    m_isDrawRect = false;

    }

    public void dropActionChanged(DropTargetDragEvent e) {

    }

    public void dragOver(final DropTargetDragEvent e) {

    TabTransferData data = getTabTransferData(e);

    if (getTabPlacement() == JTabbedPane.TOP

    || getTabPlacement() == JTabbedPane.BOTTOM) {

    initTargetLeftRightLine(getTargetTabIndex(e.getLocation()), data);

    } else {

    initTargetTopBottomLine(getTargetTabIndex(e.getLocation()), data);

    } // if-else

    repaint();

    if (hasGhost()) {

    s_glassPane.setPoint(buildGhostLocation(e.getLocation()));

    s_glassPane.repaint();

    }

    }

    public void drop(DropTargetDropEvent a_event) {

    // System.out.println("DropTarget.drop: " + DnDTabbedPane.this);

    if (isDropAcceptable(a_event)) {

    convertTab(getTabTransferData(a_event),

    getTargetTabIndex(a_event.getLocation()));

    a_event.dropComplete(true);

    } else {

    a_event.dropComplete(false);

    } // if-else

    m_isDrawRect = false;

    repaint();

    }

    public boolean isDragAcceptable(DropTargetDragEvent e) {

    Transferable t = e.getTransferable();

    if (t == null) {

    return false;

    } // if

    DataFlavor[] flavor = e.getCurrentDataFlavors();

    if (!t.isDataFlavorSupported(flavor[0])) {

    return false;

    } // if

    TabTransferData data = getTabTransferData(e);

    if (DnDTabbedPane.this == data.getTabbedPane()

    && data.getTabIndex() >= 0) {

    return true;

    } // if

    if (DnDTabbedPane.this != data.getTabbedPane()) {

    if (m_acceptor != null) {

    return m_acceptor.isDropAcceptable(data.getTabbedPane(), data.getTabIndex());

    } // if

    } // if

    return false;

    }

    public boolean isDropAcceptable(DropTargetDropEvent e) {

    Transferable t = e.getTransferable();

    if (t == null) {

    return false;

    } // if

    DataFlavor[] flavor = e.getCurrentDataFlavors();

    if (!t.isDataFlavorSupported(flavor[0])) {

    return false;

    } // if

    TabTransferData data = getTabTransferData(e);

    if (DnDTabbedPane.this == data.getTabbedPane()

    && data.getTabIndex() >= 0) {

    return true;

    } // if

    if (DnDTabbedPane.this != data.getTabbedPane()) {

    if (m_acceptor != null) {

    return m_acceptor.isDropAcceptable(data.getTabbedPane(), data.getTabIndex());

    } // if

    } // if

    return false;

    }

    }

    private boolean m_hasGhost = true;

    public void setPaintGhost(boolean flag) {

    m_hasGhost = flag;

    }

    public boolean hasGhost() {

    return m_hasGhost;

    }

    /**

    * returns potential index for drop.

    * @param a_point point given in the drop site component's coordinate

    * @return returns potential index for drop.

    */

    private int getTargetTabIndex(Point a_point) {

    boolean isTopOrBottom = getTabPlacement() == JTabbedPane.TOP

    || getTabPlacement() == JTabbedPane.BOTTOM;

    // if the pane is empty, the target index is always zero.

    if (getTabCount() == 0) {

    return 0;

    } // if

    for (int i = 0; i < getTabCount(); i++) {

    Rectangle r = getBoundsAt(i);

    if (isTopOrBottom) {

    r.setRect(r.x - r.width / 2, r.y, r.width, r.height);

    } else {

    r.setRect(r.x, r.y - r.height / 2, r.width, r.height);

    } // if-else

    if (r.contains(a_point)) {

    return i;

    } // if

    } // for

    Rectangle r = getBoundsAt(getTabCount() - 1);

    if (isTopOrBottom) {

    int x = r.x + r.width / 2;

    r.setRect(x, r.y, getWidth() - x, r.height);

    } else {

    int y = r.y + r.height / 2;

    r.setRect(r.x, y, r.width, getHeight() - y);

    } // if-else

    return r.contains(a_point) ? getTabCount() : -1;

    }

    private void convertTab(TabTransferData a_data, int a_targetIndex) {

    DnDTabbedPane source = a_data.getTabbedPane();

    int sourceIndex = a_data.getTabIndex();

    if (sourceIndex < 0) {

    return;

    } // if

    Component cmp = source.getComponentAt(sourceIndex);

    String str = source.getTitleAt(sourceIndex);

    if (this != source) {

    source.remove(sourceIndex);

    if (a_targetIndex == getTabCount()) {

    addTab(str, cmp);

    } else {

    if (a_targetIndex < 0) {

    a_targetIndex = 0;

    } // if

    insertTab(str, null, cmp, null, a_targetIndex);

    } // if

    setSelectedComponent(cmp);

    // System.out.println("press="+sourceIndex+" next="+a_targetIndex);

    return;

    } // if

    if (a_targetIndex < 0 || sourceIndex == a_targetIndex) {

    //System.out.println("press="+prev+" next="+next);

    return;

    } // if

    if (a_targetIndex == getTabCount()) {

    //System.out.println("last: press="+prev+" next="+next);

    source.remove(sourceIndex);

    addTab(str, cmp);

    setSelectedIndex(getTabCount() - 1);

    } else if (sourceIndex > a_targetIndex) {

    //System.out.println(" >: press="+prev+" next="+next);

    source.remove(sourceIndex);

    insertTab(str, null, cmp, null, a_targetIndex);

    setSelectedIndex(a_targetIndex);

    } else {

    //System.out.println(" <: press="+prev+" next="+next);</p><p>source.remove(sourceIndex);</p><p>insertTab(str, null, cmp, null, a_targetIndex - 1);</p><p>setSelectedIndex(a_targetIndex - 1);</p><p>}</p><p>}</p><p>private void initTargetLeftRightLine(int next, TabTransferData a_data) {</p><p>if (next < 0) {</p><p>m_lineRect.setRect(0, 0, 0, 0);</p><p>m_isDrawRect = false;</p><p>return;</p><p>} // if</p><p>if ((a_data.getTabbedPane() == this)</p><p>&& (a_data.getTabIndex() == next</p><p>|| next - a_data.getTabIndex() == 1)) {</p><p>m_lineRect.setRect(0, 0, 0, 0);</p><p>m_isDrawRect = false;</p><p>} else if (getTabCount() == 0) {</p><p>m_lineRect.setRect(0, 0, 0, 0);</p><p>m_isDrawRect = false;</p><p>return;</p><p>} else if (next == 0) {</p><p>Rectangle rect = getBoundsAt(0);</p><p>m_lineRect.setRect(-LINEWIDTH / 2, rect.y, LINEWIDTH, rect.height);</p><p>m_isDrawRect = true;</p><p>} else if (next == getTabCount()) {</p><p>Rectangle rect = getBoundsAt(getTabCount() - 1);</p><p>m_lineRect.setRect(rect.x + rect.width - LINEWIDTH / 2, rect.y,</p><p>LINEWIDTH, rect.height);</p><p>m_isDrawRect = true;</p><p>} else {</p><p>Rectangle rect = getBoundsAt(next - 1);</p><p>m_lineRect.setRect(rect.x + rect.width - LINEWIDTH / 2, rect.y,</p><p>LINEWIDTH, rect.height);</p><p>m_isDrawRect = true;</p><p>}</p><p>}</p><p>private void initTargetTopBottomLine(int next, TabTransferData a_data) {</p><p>if (next < 0) {</p><p>m_lineRect.setRect(0, 0, 0, 0);</p><p>m_isDrawRect = false;</p><p>return;</p><p>} // if</p><p>if ((a_data.getTabbedPane() == this)</p><p>&& (a_data.getTabIndex() == next</p><p>|| next - a_data.getTabIndex() == 1)) {</p><p>m_lineRect.setRect(0, 0, 0, 0);</p><p>m_isDrawRect = false;</p><p>} else if (getTabCount() == 0) {</p><p>m_lineRect.setRect(0, 0, 0, 0);</p><p>m_isDrawRect = false;</p><p>return;</p><p>} else if (next == getTabCount()) {</p><p>Rectangle rect = getBoundsAt(getTabCount() - 1);</p><p>m_lineRect.setRect(rect.x, rect.y + rect.height - LINEWIDTH / 2,</p><p>rect.width, LINEWIDTH);</p><p>m_isDrawRect = true;</p><p>} else if (next == 0) {</p><p>Rectangle rect = getBoundsAt(0);</p><p>m_lineRect.setRect(rect.x, -LINEWIDTH / 2, rect.width, LINEWIDTH);</p><p>m_isDrawRect = true;</p><p>} else {</p><p>Rectangle rect = getBoundsAt(next - 1);</p><p>m_lineRect.setRect(rect.x, rect.y + rect.height - LINEWIDTH / 2,</p><p>rect.width, LINEWIDTH);</p><p>m_isDrawRect = true;</p><p>}</p><p>}</p><p>private void initGlassPane(Component c, Point tabPt, int a_tabIndex) {</p><p>//Point p = (Point) pt.clone();</p><p>getRootPane().setGlassPane(s_glassPane);</p><p>if (hasGhost()) {</p><p>Rectangle rect = getBoundsAt(a_tabIndex);</p><p>BufferedImage image = new BufferedImage(c.getWidth(),</p><p>c.getHeight(), BufferedImage.TYPE_INT_ARGB);</p><p>Graphics g = image.getGraphics();</p><p>c.paint(g);</p><p>image = image.getSubimage(rect.x, rect.y, rect.width, rect.height);</p><p>s_glassPane.setImage(image);</p><p>} // if</p><p>s_glassPane.setPoint(buildGhostLocation(tabPt));</p><p>s_glassPane.setVisible(true);</p><p>}</p><p>private Rectangle getTabAreaBound() {</p><p>Rectangle lastTab = getUI().getTabBounds(this, getTabCount() - 1);</p><p>return new Rectangle(0, 0, getWidth(), lastTab.y + lastTab.height);</p><p>}</p><p>public void paintComponent(Graphics g) {</p><p>super.paintComponent(g);</p><p>if (m_isDrawRect) {</p><p>Graphics2D g2 = (Graphics2D) g;</p><p>g2.setPaint(m_lineColor);</p><p>g2.fill(m_lineRect);</p><p>} // if</p><p>}</p><p>public interface TabAcceptor {</p><p>boolean isDropAcceptable(DnDTabbedPane a_component, int a_index);</p><p>}</p><p>}</p><p>class GhostGlassPane extends JPanel {</p><p>public static final long serialVersionUID = 1L;</p><p>private final AlphaComposite m_composite;</p><p>private Point m_location = new Point(0, 0);</p><p>private BufferedImage m_draggingGhost = null;</p><p>public GhostGlassPane() {</p><p>setOpaque(false);</p><p>m_composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f);</p><p>}</p><p>public void setImage(BufferedImage draggingGhost) {</p><p>m_draggingGhost = draggingGhost;</p><p>}</p><p>public void setPoint(Point a_location) {</p><p>m_location.x = a_location.x;</p><p>m_location.y = a_location.y;</p><p>}</p><p>public int getGhostWidth() {</p><p>if (m_draggingGhost == null) {</p><p>return 0;</p><p>} // if</p><p>return m_draggingGhost.getWidth(this);</p><p>}</p><p>public int getGhostHeight() {</p><p>if (m_draggingGhost == null) {</p><p>return 0;</p><p>} // if</p><p>return m_draggingGhost.getHeight(this);</p><p>}</p><p>public void paintComponent(Graphics g) {</p><p>if (m_draggingGhost == null) {</p><p>return;</p><p>} // if</p><p>Graphics2D g2 = (Graphics2D) g;</p><p>g2.setComposite(m_composite);</p><p>g2.drawImage(m_draggingGhost, (int) m_location.getX(), (int) m_location.getY(), null);</p><p>}</p><p>}</p><p>2020-09-11</p></div>">

    展开全文
  • java实现拖拽示例 Swing中实现拖拽功能,代码很简单,都有...import java.awt.*;import java.awt.datatransfer.DataFlavor;import java.awt.dnd.DnDConstants;import java.awt.dnd.DropTarget;import java.awt.dnd...
  • 你在DropTargetListener中把各个DataFlavor打印处理看看:publicvoiddrop(DropTargetDropEventdtde){System.out.println("drop........................");Transferablett=dtde.getTransferable();...
  • 拖动鼠标时,我计算新的和之间的差异旧光标在屏幕上的位置,并移动由这种差异组成.使用最新的JDK 6 unter Linux(OpenSuse,KDE3)进行测试,但是,嘿,它是Java Swing,应该在所有地方同等地工作.这里是代码:import java.aw...
  • 请问java的大牛,java中是否有鼠标拖动控件,控件随着鼠标移动,一直到放下的api?
  • Android拖动控件改变其位置

    千次阅读 2017-11-07 15:25:10
    Android拖动控件改变其位置 原创 2012年12月26日 17:54:25 3100 mainActivity如下: [java] view plain copy package cn.dragtest;  import android.app.Activity...
  • 需求:像相册中的图片跟随手指拖动,双指的放大和缩小,相册中拖出范围之后有弹回的动画,感觉上很圆润,很舒服,我写的例子中并没有加动画思路:1.自定义DragImageView.java2.自定义中先画图片,图片大于屏幕就把...
  • <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app=... a.
  • java中树形控件的拖拽 拖放监听,实现各节点间的拖拽
  • 在单个应用程序而不是应用程序之间拖动组件的一种方法是使用JLayeredPane.例如,请在此处查看我的代码:dragging a jlabel around the screen扑克牌的一个例子看起来像这样(只要扑克牌图像仍然有效!):import java....
  • Android控件拖动

    2013-04-09 14:48:12
    这里演示控件拖动的动画:     原理就是响应控件的Touch事件,在Touch事件中对移动进行处理,注意,一定要在布局文件中设置控件的 android:clickable="true"。   代码如下: [java]...
  • 下面就写一个案例,Java代码如下 : public class MyText extends TextView { int lastX; int lastY; public MyText(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean ...
  • 如何设置java控件的位置和大小 放个控件还真麻烦啊!不好指定位置,用那三个布局管理器也根本不怎么管用啊!要是能像.NET的C#那样就好了,直接拖动安放就好了。于是我就想着,要是有个设置控件位置的函数就好了呢!...
  • 效果如图 不用实现拖拽效果 点击生成即可 求一个可行的方法
  • Day13-拖动控件

    2015-01-16 08:58:03
    .java代码: package com.example.day6; import android.app.Activity; import android.os.Bundle; import android.view.View.OnCreateContextMenuListener; import android.widget.SeekBar; import android....
  • 在使用Java Swing做程序时,使用MouseMotionListener的mousedragged鼠标事件,但拖动时,元素位置闪烁变化。 输出了位置数值查看发现位置会从左上角“瞬移”。 import java.awt.event.MouseMotionListener; public...
  • android本身已经定义好的控件可以用来实现UI界面的设计,但更多时候,有些控件的功能需要我们自己去定义与实现。下面为大家介绍一个简单的自定义View组件,可以实现自由拖动的效果。 首先,创建一个Java类继承自...
  • Android控件拖动的实现

    2015-05-27 23:14:28
    这个是拖动以后的效果,一个imageview和一个button控件,提供两份代码下载吧,一份是只有一个Button的,另一份就是像上图,就是多了一个imagview!先看下代码吧,比较简单: [java] view plain
  • Drag---长按控件进行拖动

    千次阅读 2016-06-02 12:33:20
    自定义的控件,新建一个被拖动View控件,Dragging.java: import android.content.Context; import android.util.AttributeSet; import android.view.View; //自定义的View类型的子类,作为被拖动View public class ...
  • java"] package { import flash.display.DisplayObject; import flash.display.Shape; import flash.display.Sprite; import flash.events.MouseEvent; import flash.filters.Drop...
  • 看了以前的帖子@raistlic说是重绘问题,但是按帖子方法把setVisible放在添加控件后面不起作用。使用getContentPane()invalidate.()总是提示找不到符号。 ``` import java.awt.*; import java.awt.event.*; import ...
  • 转自:http://blog.csdn.net/boylinux/article/details/8860443Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件。 1、为了防止拖动ListView时,在列表末尾重复数据显示。需要加入 ...
  • 仿照淘宝和聚美优品,在商品详情页,向上拖动时,可以加载下一页。使用ViewDragHelper,滑动比较流畅。...Java代码 import android.annotation.SuppressLint; import android.content.Context
  • 1.酷狗“听”页面拖动“乐库”和“歌单”换位置,动作前后截图 2.打开相机,浏览并放大图片 运行环境 Java1.8 ; Java-client-4.1.2 ; selemium3.0 ; Appium-linux-1.12.1.AppImage Java中driver.pinch(WebElement...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 226
精华内容 90
关键字:

java拖动控件

java 订阅