gpt4 book ai didi

java - JLabel transferhandler 复制工作但不 move

转载 作者:行者123 更新时间:2023-12-04 05:24:38 25 4
gpt4 key购买 nike

我想将文本从一个 jlabel move 到另一个,但由于某种原因,只有复制工作而不 move 。我在 handler.exportAsDrag(comp, e, TransferHandler.MOVE); 中使用了 transferhandler只有 TransferHandler.COPY 有效。

            add1 = new JLabel("", JLabel.CENTER);
add1.setTransferHandler(new TransferHandler("text"));
add1.setBorder(b2);


add2 = new JLabel("", JLabel.CENTER);
add2.setTransferHandler(new TransferHandler("text"));
add2.setBorder(b2);

MouseListener listener = new DragMouseAdapter();

add1.addMouseListener(listener);
add2.addMouseListener(listener);

panel2a.add(add1);

panel2a.add(add2);

他们使用这个私有(private)内部类被拖动
private class DragMouseAdapter extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
JComponent comp = (JComponent)e.getSource();
TransferHandler handler = comp.getTransferHandler();

//c.setOpaque(true);
handler.exportAsDrag(comp, e, TransferHandler.MOVE);

}


}

最佳答案

TransferHandler.getSourceActions()的执行默认返回 COPY如果指定的属性存在并且有适当的 getter:

public int getSourceActions(JComponent c) {
PropertyDescriptor prop = getPropertyDescriptor(c);
if (prop != null) {
return COPY;
}
return NONE;
}

因此,当您指定 MOVEexportAsDrag()处理程序决定不支持该操作。

您可以覆盖此方法以添加您的源支持的任何操作。例如:
add1.setTransferHandler(new TransferHandler("text") {
@Override
public int getSourceActions(JComponent c) {
return COPY | MOVE;
}
});

编辑:实现 exportDone
this.setTransferHandler(new TransferHandler("text") {
@Override
protected void exportDone(JComponent source, Transferable data, int action) {
if (action == MOVE){
((JLabel) source).setText("");
}
}

@Override
public int getSourceActions(JComponent c) {
return COPY | MOVE;
}
});

关于java - JLabel transferhandler 复制工作但不 move ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13333556/

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