2016-08-15 30 views
0

我想實現一個擺動撤消函數,返回一個標籤到jPanel上的按鈕時按下按鈕被按下。我向標籤添加了組件列表器,但我只能獲取當前位置,不知道如何獲取標籤的以前位置。我怎樣才能檢索標籤以前的位置,當它被移動

class ComponentEventAdapter implements ComponentListener { 

    @Override 
    public void componentHidden(ComponentEvent e) { 
     //do nothing. 
    } 

    @Override 
    public void componentMoved(ComponentEvent e) { 

      Point oldP; 
      Point newP = e.getComponent().getLocation(); 

     undoManager.undoableEditHappened(new UndoableEditEvent(modelPanel, new ComponentAdditionEdit(e.getComponent(),oldP , newP))); 

    } 

    @Override 
    public void componentResized(ComponentEvent e) { 
     // Do nothing. 

    } 

    @Override 
    public void componentShown(ComponentEvent e) {   
     undoManager.undoableEditHappened(new UndoableEditEvent(modelPanel, new ComponentAdditionEdit(e.getComponent(),e.getComponent().getLocation()))); 
    } 

} 

如何將標籤/元件舊位置傳遞給oldP。

+0

移動最初是如何觸發的(MouseListener?ActionListener?)? – copeg

回答

0

最簡單的方法(我認爲)將是創建一個新的類,它擴展了JLabel,除了它有一個oldP變量以外,它在每個方面都是相同的。像:

class superNeatJLabel extends JLabel { 

    public Point oldP; 

    public superNeatJLabel() { 
     super(); 
     oldP = this.getLocation() 
    } 
} 

然後只是根據需要更新或檢查oldP。或者,你可以讓oldP爲私人並添加getter和setter,但這取決於你。也可能這不會是你的構造函數,因爲考慮到經常有時間擺動組件在它們有界限之前被實例化,但希望這足以讓這個想法貫穿始終。

Futher,如果你在多態性的親們,可以延長Component代替,而該類型所有Components這可能變得棘手,雖然,看到你不能實例化一個Component,但它肯定可以的。

+1

謝謝,我已經使用JLabel的子類,我添加了兩個字段oldP和newP,並創建了一個方法,在將newP更新到標籤當前位置之前,將newP的大小傳遞給oldP。 –

相關問題