AWT或者swing都需要用得布局控制器
如果我想通过拖曳某个控件从而在某个位置动态生成一个控件,是不是做不到?
我感觉好像不行我现在做工况图的维护,也就是在一张背景图上,用标签来对应测点的位置,各位可有更好的解决方案?

解决方案 »

  1.   

    当然可以实现了既然java可以通过Remove和add方法来添加删除控件,那空间的位置也就不存在问题了。你还可以动态设置它的layout难点在于怎么确定控件应该添加到layout的什么点上。你说的情况我觉得最好的实现方法是自己实现LayoutManager,这样比较好决定控件被拖曳到什么位置上。
      

  2.   

    按照你的情况,用borland的xylayout比较好实现 可以具体到x、y轴的坐标
      

  3.   

    留意一下Container.add(comp,index)方法,这个index就是你要插入的位置。
      

  4.   

    拖拽的时候,怎么能拖到另外一层,我用xylayout,我想从另外一层把控件拖进来
    另外,拖拽时候,怎样才能显示一个虚线的拖动对象?就象windows那样?多谢~
      

  5.   

    组件拖拽效果?java恐怕做起来比较困难
      

  6.   

    从另外一层拖过来其实就是remove和add的动作而已,没什么深奥的
    至于虚线来显示拖动对象,这个非常难.严格的来说要通过手动绘制来实现,当然你也可以简单的设置鼠标cursor来实现,就是自己做个带小虚线方框的鼠标.
      

  7.   

    如果拖曳效果比较难那就算了
    现在的问题是,我虽然用鼠标拖动组件到一个新的位置
    但是每次我向当前的jpanel里增加新的组件时候
    调用 
    jPanel3.add(jLabel);
    jPanel3.validate();
    结果原来被拖动的组件又回到拖动前的位置
    这个应该怎样避免呢我现在想用序列化把整个jpanel保存起来
      

  8.   

    jPanel3的layout是采用xYLayout
    这个哪里需要特别设置呢?
      

  9.   

    你拖动后要设置被拖动的component的位置
    代码贴出来看看,就是拖动的代码
      

  10.   


     static Point origin = new Point();//鼠标拖动   
     public void jLabel1_mouseDragged(MouseEvent mouseEvent) {
            Point p = jLabel1.getLocation();
            jLabel1.setLocation(p.x + mouseEvent.getX() - origin.x, p.y + mouseEvent.getY()
    - origin.y);
            repaint();
                }
    //鼠标按下
     
        public void jLabel1_mousePressed(MouseEvent e) {
            origin.x = e.getX();
            origin.y = e.getY();    }
      

  11.   

    若将jPanel3的layout设置为空
    我将其中的按钮序列化,然后再反序列化,可以成功,但,向其中动态增加按钮失败(没有显示)如果不设置为空,可以动态增加按钮,但反序列化时候,按钮位置给重置了
    我怀疑是布局控制器的问题
    但不知怎么解决