如何在Java应用程序中拖放时更改光标

3

我遇到了一些问题,但是无法解决... 我正在编写一个使用JList的Swing Java应用程序,可以接受拖放操作。我想在从系统中拖动文件或文件夹到Java应用程序时更改光标。

2个回答

4

我已经找到了答案...虽然感谢Clinton的回答。这是我使用的方法:

首先创建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);
    }
});

1

当用户将鼠标移动到您的JList上时,以下内容仅更改光标。

您可以通过使用鼠标监听器setCursor方法来更改组件(即您的JList)上的光标。

基本上只需将鼠标监听器添加到您的JList中,并在应用程序中的组件上使用setCursor来更改光标(mouseEntered和mouseExit)。您还可能需要对拖放代码进行一些查询,以便仅在将有效内容拖入JList时更改光标。

希望这能有所帮助。


1
好的,我尝试过了。但是当拖动文件或文件夹到JList上时,MouseListener不会注册。即使Java应用程序在前景并且“已选择”。谢谢。 - Gianni
@Gianni - 你的意思是它没有接收到任何事件吗? - Clinton
确实。它不会“触发”鼠标悬停事件。 - Gianni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接