鼠标释放后重新排序项目

时间:2012-12-03 21:49:10

标签: java swing

我不确定有什么问题,所以我会尝试解释它,你可以在下面的例子中测试它:
该项目(3 MB):http://ryannaddy.com/downloads/dist.zip

  1. 取消压缩并运行jar文件
  2. 在应用程序中打开2个图像文件
  3. 在右侧是所有打开图像的列表,您可以拖放图层以最终订购主图片的z顺序。
  4. 如果您将顶层拖动到底层下面,它会移回到顶层(应移到底层以下)
  5. 如果将顶层向下拖动几个像素,它会将顶层移动到底层下方。
  6. 如果你向下拖动底层,它会将它移到顶层之上(应该保持在底部)
  7. 最后,我想将这些标签拖到任何位置,它会放置标签。

    释放鼠标以组织标签后执行的代码块:

    public void lblMouseReleased(MouseEvent evt){
        if(dragging){
            int componentCount = layers.getComponentCount() - 1;
            LayerItem[] comps = new LayerItem[componentCount];
    
            FocusTraversalPolicy focus = layers.getFocusTraversalPolicy();
    
            Component comp = focus.getFirstComponent(layers);
            for(int i = 0; i < componentCount; i++){
                Component newComp = focus.getComponentAfter(layers, comp);
                comp = newComp;
                comps[i] = (LayerItem)newComp;
                System.out.println(comps[i].layerID);
            }
            Layers.rebuild(layers, comps);
        }
        dragging = false;
    }
    

    Layers.rebuild 的代码:

    public static void rebuild(JPanel layers, Component[] list){
        for(int i = 0; i < list.length; i++){
            layers.remove(list[i]);
        }
        for(int i = 0; i < list.length; i++){
            list[i].setBounds(0, i * 50 + 30, 198, 50);
            layers.add(list[i]);
        }
        layers.revalidate();
        layers.repaint();
    }
    

    这应该是问题的所有相关代码,如果您需要更多,请告诉我。

1 个答案:

答案 0 :(得分:0)

我明白了!我是因为我没有得到面板中所需的所有物品。我面板中的第一项是焦点设置为false的标题,因为它不是分组的一部分,所以我告诉我的代码只能订购1+项时应该是0 +