我正在尝试将 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/