gpt4 book ai didi

JPanel 中的 Java 自定义拖放

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:30 26 4
gpt4 key购买 nike

Java 自定义拖放 - 没有对 TransferHandler 的回调。

我想为 JPanel 实现自定义拖放功能子类。我遵循标准 DnD 教程的指南:

Drag and Drop and Data Transfer

从表面上看,事情似乎很简单,但当我真正尝试一下,我没有发现任何 DnD 行为正在发生的迹象。在事实上,我的 TransferHandler 中的任何方法都没有被调用。

那么,让我们回顾一下我做了什么......

我创建了自己的 Container 类,它声明自己扩展 JPanel:

public class DnDUnitPanel extends JPanel
{
...
}

我从这个演示中复制了 ListTransferHandler:

Drop Demo

将类重命名为 DndUnitTransferHandler,删减了以下代码引用 JList 对象,并安装 System.out.println() 语句那里的 5 种方法中的每一种。

然后我像这样实例化两个不同的 DnDUnitPanel 实例:

DnDUnitPanel topPanel = new DnDUnitPanel(new GridLayout(0, 4, 6, 6), true);
// topPanel.setDragEnabled(true);
topPanel.setName("Top Panel");
topPanel.setTransferHandler(new DnDUnitTransferHandler());

DnDUnitPanel bottomPanel = new DnDUnitPanel(new GridLayout(0, 4, 6, 6), true);
// bottomPanel.setDragEnabled(true);
bottomPanel.setName("Bottom Panel");
bottomPanel.setTransferHandler(new DnDUnitTransferHandler());

(我还创建了一些 JLabel 实例并将它们添加()到面板(未显示))。

当我尝试将 JLabel 从一个面板拖到另一个面板时,没有任何反应。所以我回去重读了这个页面:

Transfer Handler

特别是关于 setDragEnabled() 的内容:

turns on drag support. (The default is false.) This method is
defined on each component that supports the drag gesture; the link
takes you to the documentation for JList.

JPanel 没有 setDragEnabled() 方法。所以,我问自己,什么这真的意味着:“支持拖动手势的组件”吗?

我首先认为这一定意味着声明要实现的东西MouseListener 和/或 MouseMotionListener。我将 DnDUnitPanel 修改为声明它实现并提供了所有方法。有这样做,我可以看到 mousePressed()、mouseClicked()、mouseDragged() 等被调用,但仍然没有TransferHandler 被调用,但仍然没有拖动光标指示某些东西被拖拽或准备被丢弃。

然后我查看了 JList 本身的源代码并决定“支持拖动手势”实际上只是意味着具有具有关联的 getter 和 setter 的“dragEnabled”属性。

因此,我声明了属性并提供了 getter 和 setterDnDUnitPanel 通过直接从 JList 本身复制代码(思考也许我不完全理解的东西正在打电话isDragEnabled() 并寻找一个真值来启动 DnD 行为。)

不幸的是,提供这些(并取消注释上面的调用DnDUnitPanel.setDragEnabled()) 也没有效果。

所以... TransferHandler 永远不会被调用 ()。显然,有些东西important 在这里丢失了,但我没有看到它可能是什么。

我不知道下一步该做什么。

有人看到这里缺少了什么吗?

最佳答案

基本上您需要一个数据源。

看看其他Stackoverflow question , herehere (很好解释DnD)

关于JPanel 中的 Java 自定义拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com