我正在尝试将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);
    }
});


我的问题是,我可以在null布局中使用TransferHandler吗?
当我开始拖动东西时,鼠标光标就会变成这样的形状:
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事件。

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

09-30 14:11