java - 无布局的 TransferHandler

标签 java swing

我正在尝试将 JPanel 编码为在其上绘制图形的空间。为此,我将布局设置为 null

mainPanel.setLayout(null);

然后,我在主面板中插入了一些按钮,以尝试实现拖放功能。

btn.setTransferHandler(new TransferHandler("text"));
btn.addMouseListener(new MouseAdapter(){
    public void mouseDragged(MouseEvent e){
        Dimension size=btn.getPreferredSize();
        JButton button = (JButton)e.getSource();
        TransferHandler handle = button.getTransferHandler();
        handle.exportAsDrag(button, e, TransferHandler.COPY);
    }
});

我的问题是,我可以在空布局中使用 theTransferHandler 吗? 一旦我开始拖动东西,鼠标光标就会变成这样的形状: forbidden action

最佳答案

TransferHandler 用于传输数据,而不是在面板上移动按钮。所以布局没有任何影响。

在您的情况下,您将 TransferHandler 设置为“文本”,这意味着您正在尝试将按钮的“文本”传输到其他组件。

btn.addMouseListener(new MouseAdapter(){
    public void mouseDragged(MouseEvent e){
        Dimension size=btn.getPreferredSize();
        JButton button = (JButton)e.getSource();
        TransferHandler handle = button.getTransferHandler();
        handle.exportAsDrag(button, e, TransferHandler.COPY);
    }
});

MouseListener 中没有 mouseDragged 事件。 mouseDragged 事件在 MouseMotionListener 中生成。

当我将 MouseListener 添加到组件以支持 DnD 时,我总是将逻辑添加到 mousePressed 事件中。

阅读 Swing 教程中关于 Drag and Drop and Data Transfer 的部分了解更多信息和示例以帮助您入门。

关于java - 无布局的 TransferHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50380048/

相关文章:

java - 执行 kafka-console-consumer.sh 时,zookeeper 不是可识别的选项

java - Guice CreationException - 没有绑定(bind) Foo 类型的实现

java - 如何将 "a3b3"这样的字符串解压为aaabbb?

java - Java 中的 Action 监听器

java - 调用 JEditor.setEditable() 时更改光标悬停在超链接上

java - HTTPS 的代理 Servlet

java - 如何使用 JNDI 添加新组到 ApacheDS?

java - 如何将文本应用到文本区域

Java 图形多个类

java - 如何在 Java Swing 中编写此 GUI