界面方面java比较弱 否则你用jb就应该可以在设计期间随意拖动按钮
连jb都没做到 估计要实现只能走偏门
我觉得如果你的界面很简单 或者说只有一个按钮那还好说
大不了用四个label夹着按钮判断位置
可要界面上东西多 那就太复杂了忽忽 我不是高手 说不定有很好的解决方法我不知道 
但还是建议你想别的办法

解决方案 »

  1.   

    用visual J++就简单了,只要setPosition(..)就可以了。
    home.nyc.rr.com/hayai
      

  2.   

    理论上是可以实现的,用MouseListener和MouseMotionListener可以做,不过效果不是很好,拖动的时候一顿一顿的,不平滑,要是swing可以利用其GlassPane
      

  3.   

    那你们说我要是用JLayeredPane将个组件放置在不同的层上是否可以?
      

  4.   

    试试看吧,我也没试过,我是利用GlassPane在顶层画了个框。
      

  5.   

    可以,比较简单的就是根据鼠标坐标移动,要想做的好就下载Java Web Start,sun的网站上有个Draw4 App的,看一看源码,下面是很久很就以前我做的一个例子,其实还可以做许多简化,也不需要坐标变换:
    package tuodeng;import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
    import com.borland.jbcl.layout.*;
    import com.borland.jbcl.control.*;
    import javax.swing.*;public class AppletTuo extends Applet
    {
      XYLayout xYLayout1 = new XYLayout();
      boolean isStandalone = false;
      JButton jButton1 = new JButton();
      TopoSymbol topo = new TopoSymbol();
      int xx,yy;
      Frametuo ff=new Frametuo();  Line line = new Line();
      //Construct the applet
      public AppletTuo()
      {
      }  //Initialize the applet
      public void init()
      {
        try
        {
          jbInit();
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
      }  //Component initialization
      private void jbInit() throws Exception
      {  ff.show();
        jButton1.setText("jButton1");
        jButton1.addMouseMotionListener(new AppletTuo_jButton1_mouseMotionAdapter(this));
        jButton1.addMouseListener(new AppletTuo_jButton1_mouseAdapter(this));
        jButton1.addActionListener(new AppletTuo_jButton1_actionAdapter(this));
        xYLayout1.setWidth(400);
        xYLayout1.setHeight(300);
        this.setLayout(xYLayout1);
        this.addMouseMotionListener(new AppletTuo_this_mouseMotionAdapter(this));
        topo.setBorder(null);
        topo.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {      public void mouseDragged(MouseEvent e) {
            topo_mouseDragged(e);
          }
        });
        line.setBackground(Color.red);
        line.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
          public void mouseDragged(MouseEvent e) {
            line_mouseDragged(e);
          }
        });
        this.add(jButton1, new XYConstraints(37, 45, 60, 30));
        this.add(topo, new XYConstraints(132, 145, 45, 45));
        this.add(line, new XYConstraints(244, 31, 45, 45));
      }  //Get Applet information
      public String getAppletInfo()
      {
        return "Applet Information";
      }  //Get parameter info
      public String[][] getParameterInfo()
      {
        return null;
      }  void jButton1_actionPerformed(ActionEvent e)
      {  }  void this_mouseDragged(MouseEvent e)
      {   // jButton1.move(e.getX(),e.getY());
      }  void jButton1_mouseReleased(MouseEvent e)
      {
       System.out.println(e.getX()+"::"+e.getY());
       System.out.println(jButton1.getX()+"::"+jButton1.getY());
      }  void jButton1_mouseDragged(MouseEvent e)
      {     xx=e.getComponent().getX()-jButton1.getWidth()/2;
         yy=e.getComponent().getY()-jButton1.getHeight()/2;
         e.translatePoint(xx,yy);
         jButton1.move(e.getX(),e.getY());  }  void topo_mouseDragged(MouseEvent e) {
      if(topo.selected)
      {
        e.translatePoint(e.getComponent().getX()-topo.iconRect.width/2,e.getComponent().getY()-topo.iconRect.height/2);
        topo.move(e.getX(),e.getY());
      }
      }  void line_mouseDragged(MouseEvent e) {
        e.translatePoint(e.getComponent().getX()-line.width/2,e.getComponent().getY()-line.height/2);
        line.move(e.getX(),e.getY());  }
    }class AppletTuo_jButton1_actionAdapter implements java.awt.event.ActionListener
    {
      AppletTuo adaptee;  AppletTuo_jButton1_actionAdapter(AppletTuo adaptee)
      {
        this.adaptee = adaptee;
      }  public void actionPerformed(ActionEvent e)
      {
        adaptee.jButton1_actionPerformed(e);
      }
    }class AppletTuo_this_mouseMotionAdapter extends java.awt.event.MouseMotionAdapter
    {
      AppletTuo adaptee;  AppletTuo_this_mouseMotionAdapter(AppletTuo adaptee)
      {
        this.adaptee = adaptee;
      }  public void mouseDragged(MouseEvent e)
      {
        adaptee.this_mouseDragged(e);
      }
    }class AppletTuo_jButton1_mouseAdapter extends java.awt.event.MouseAdapter
    {
      AppletTuo adaptee;  AppletTuo_jButton1_mouseAdapter(AppletTuo adaptee)
      {
        this.adaptee = adaptee;
      }  public void mouseReleased(MouseEvent e)
      {
        adaptee.jButton1_mouseReleased(e);
      }
    }class AppletTuo_jButton1_mouseMotionAdapter extends java.awt.event.MouseMotionAdapter
    {
      AppletTuo adaptee;  AppletTuo_jButton1_mouseMotionAdapter(AppletTuo adaptee)
      {
        this.adaptee = adaptee;
      }  public void mouseDragged(MouseEvent e)
      {
        adaptee.jButton1_mouseDragged(e);
      }
    }
      

  6.   

    你用GlassPane在顶层画了一个框,那其他组件呢,要是其他组件需要有鼠标事件,那怎么办啊
      

  7.   

    一、你在拖动按钮的时候还可以用鼠标干别的事吗?
    二、GlassPane可视的时候将截获所有鼠标事件,书上是这么说的,结果好象是在骗我。
      

  8.   

    我是意思是在GlassPane上画个框,在拖动时并不实际移动按钮,而是移动那个框,停止拖动时才把按钮真正移过去。类似VA的可视化环境。
      

  9.   

    我要faint了,这是由你自己控制的啊,另,我想知道你到底在按钮上加了什么组件
      

  10.   

    不好意思啊,我对java2d不熟,所以很多问题很幼稚,
    你不要见怪
    我以前问过你这个问题的
    就是有个机架,机架内有其它组件,
    可以同时移动,还有交互功能