0

何が悪いのかわからないので、説明を試みます。次の例でテストできます:
プロジェクト (3 MB): http://ryannaddy.com/downloads/dist.zip

  1. jarファイルを解凍して実行します
  2. アプリケーション内で 2 つの画像ファイルを開く
  3. 右側には開いているすべての画像のリストがあり、レイヤーをドラッグ アンド ドロップして、最終的にメイン画像の z オーダーを並べ替えることができます。
  4. 一番上のレイヤーを一番下のレイヤーの下にドラッグすると、一番上に戻ります(一番下のレイヤーの下に移動する必要があります)
  5. 最上層を数ピクセル下にドラッグすると、最上層が最下層の下に移動します。
  6. 一番下のレイヤーを下にドラッグすると、一番上のレイヤーの上に移動します(一番下に保持する必要があります)

最後に、これらのラベルを任意の場所にドラッグしたいと思います。ラベルを配置する場所があります。

ラベルを整理するためにマウスが離された後に実行されるコード ブロック:

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();
}

これは問題に関連するすべてのコードである必要があります。さらに必要な場合はお知らせください。

4

1 に答える 1

0

わかった!パネルに必要なすべてのアイテムを取得していなかったことが原因でした。私のパネルの最初の項目は、グループ化の一部ではないため、フォーカスが false に設定されたヘッダーです。そのため、0+ である必要があるときに項目 1+ のみを注文するようにコードに指示していました。

于 2012-12-04T17:56:09.100 に答える