2009-12-21 56 views
3

我遇到一些問題,我只是無法弄清楚...... 我正在用可接受拖放操作的JList編寫Swing Java應用程序。我想在通過Java應用程序從系統中拖動文件或文件夾的同時更改光標。如何在放入Java應用程序時更改光標

回答

4

我自己找到了......感謝克林頓的回答。下面是我用什麼:

首先創建JList的......大家都知道該怎麼做...... 然後我添加了一個的setDropTarget:

lstFiles.setDropTarget(new DropTarget() 
{ 
    @Override 
    public synchronized void drop(DropTargetDropEvent dtde) 
    { 
     this.changeToNormal(); 
     //handle the drop... [...] 
    } 

    @Override 
    public synchronized void dragEnter(DropTargetDragEvent dtde) 
    { 
     //Change cursor... 
     Cursor cursor = new Cursor(Cursor.HAND_CURSOR); 
     setCursor(cursor); 

     //Change JList background... 
     lstFiles.setBackground(Color.LIGHT_GRAY); 
    } 

    @Override 
    public synchronized void dragExit(DropTargetEvent dtde) 
    { 
     this.changeToNormal(); 
    } 

    private void changeToNormal() 
    { 
     //Set cursor to default. 
     Cursor cursor = new Cursor(Cursor.DEFAULT_CURSOR); 
     setCursor(cursor); 

     //Set background to normal... 
     lstFiles.setBackground(Color.WHITE); 
    } 
}); 
+0

啊哈!幹得不錯! – Clinton

1

以下只會在用戶將鼠標移動到JList上時更改光標。

通過使用mouse listenersetCursor方法將鼠標懸停在某個組件(即您的JList)上時,可以更改光標。

本質上只需將鼠標監聽器添加到JList中,並在用戶將鼠標放在應用程序中的組件(mouseEntered和mouseExit)上時使用setCursor更改光標。您可能還需要對拖放代碼進行一些查詢,以便在某些有效內容被拖入JList時更改光標。

希望這會有所幫助。

+1

嗯,我試過了。但是,當通過JList拖動文件或文件夾時,MouseListener不會註冊。儘管Java應用程序處於前臺並且處於「已選中」狀態。 謝謝。 – Gianni

+0

@Gianni - 通過「不會註冊」,你的意思是它沒有收到任何事件? – Clinton

+0

確實。它不會'觸發'mouseover事件。 – Gianni