【发布时间】:2017-07-10 17:30:57
【问题描述】:
我是java新手。我想用java swing做一个拖放应用程序。其中,会有一些 JLabel source(label1,label2,label3) 和 destination(labelD1,labelD2,labelD3) 用于拖放。一个标签只能拖放一次,如果第二次拖放一个已经拖放到任何目标标签的标签,应该有一个警告消息。我尝试使用 addMouseMotionListener 但无法解决。如果我有任何建议应该是正确的方法,那将是一个很大的帮助。
我的代码如下:
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionAdapter;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.TransferHandler;
public class Editor extends JFrame{
String selectedLable = "";
JLabel label1,label2, label3, labelD1, labelD2, labelD3;
public Editor() {
super("Drag and Drop Image");
label1 = new JLabel("label1");
label2 = new JLabel("label2");
label3 = new JLabel("label3");
labelD1 = new JLabel();
labelD2 = new JLabel();
labelD3 = new JLabel();
label1.setBounds(20, 30, 50, 50);
label2.setBounds(100, 30, 50, 50);
label3.setBounds(180, 30, 50, 50);
labelD1.setBounds(20, 200, 50, 20);
labelD2.setBounds(100, 200, 50, 20);
labelD3.setBounds(180, 200, 50, 20);
labelD1.setBorder(BorderFactory.createLineBorder(Color.black));
labelD2.setBorder(BorderFactory.createLineBorder(Color.black));
labelD3.setBorder(BorderFactory.createLineBorder(Color.black));
MouseListener ml = new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
JComponent jc = (JComponent)e.getSource();
TransferHandler th = jc.getTransferHandler();
th.exportAsDrag(jc, e, TransferHandler.COPY_OR_MOVE);
//can i get the source label and check, is label already in
//global variable,show warning if its dragged and dropped
//once??
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
};
/*
label1.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
// can i set the sourse label to a global variable and
// and check it mousePressed??
}
});
*/
label1.addMouseListener(ml);
label2.addMouseListener(ml);
label3.addMouseListener(ml);
label1.setTransferHandler(new TransferHandler("text"));
label2.setTransferHandler(new TransferHandler("text"));
label3.setTransferHandler(new TransferHandler("text"));
labelD1.setTransferHandler(new TransferHandler("text"));
labelD2.setTransferHandler(new TransferHandler("text"));
labelD3.setTransferHandler(new TransferHandler("text"));
add(label1);
add(label2);
add(label3);
add(labelD1);
add(labelD2);
add(labelD3);
setLayout(null);
setSize(500,500);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Editor();
}
}
【问题讨论】:
标签: java swing drag-and-drop