我正在尝试将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教程中的部分,以获取更多信息和示例,以帮助您入门。