0

たとえば、内部に 3 つの Jpanel を含む Jpanel(コンテナ) があるとします。それらは JPanel ArrayList にあります。ここで、マウスが押されたパネルとマウスが離されたパネルを特定できるようにしたいと考えています。このようにして、配列リスト内のパネルを並べ替え、新しい順序でコンテナーに戻すことができます。

現在、スワップで機能するコードがありますが、問題はどのパネルがスワップされているかを判断することです。押されたときにコンテナ内の startIndex がそのインデックスに設定され、マウスが離されたときに endIndex が割り当てられる内側のパネルにアクション リスナーが追加されました。

@Override
public void mousePressed(MouseEvent e) {
    con.startIndex = (this);
}

@Override
public void mouseReleased(MouseEvent e) {
    con.endIndex = (this);
    con.swap();
}

しかし、マウスが押されたのと同じパネルと常に交換しようとします。誰かアイデアはありますか?

public void swap() {
    //This swap code works for the two numbers it's given
    System.out.println("start swapping");
    System.out.println(startSwapIndex + " with " + endSwapIndex);

    if(startSwapIndex != endSwapIndex){
        SpecPanel start = this.getSpecPanel(startSwapIndex);
        SpecPanel end = this.getSpecPanel(endSwapIndex);

        panels.set(endSwapIndex, start);
        panels.set(startSwapIndex, end);

        removeAllSpecPanels();
        addAllSpecPanels();

        System.out.println("swap complete");
    }
}

ありがとう。

4

1 に答える 1

1
Component c =  container.findComponentAt(event.getX(), event.getY());

イベント座標はクリックしたパネルを基準にしていると思いますので、最初に親パネルを基準に座標を変換する必要があるでしょう。見る:

SwingUtilities.convertPoint(...);

マウスポイントを変換するのに役立ちます。

于 2013-06-17T15:12:06.207 に答える