日期:2014-05-19  浏览次数:20787 次

JList中如何实现鼠标拖动,交换2个元素的值
在JList中想选中一个元素,按住鼠标不放,拖拉到这个list的另一个元素上,实现2个元素值的改变,比如选择了元素

  A : 2 ,拖拉到C :5 上,放开鼠标后的效果是, A : 5 是一个元素,位置是原来A :2 的位置 ; C : 2则在原来C : 5的位置,就是交换2个元素 : 号 后面的部分,该如何实现呢?然后那个鼠标拖拉过程中,鼠标箭头上可以有东西吗? 就像我们拖动电脑桌面上的文件一样。

下面是我写的没有实现的代码,直接运行就可以,那个拖动事件不会写








import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;

public class ListFrame extends JDialog{
 private JList jList1;
 private JButton jButton1;
 private JButton jButton2;
 private JList jList2;
 private DefaultListModel listModel1;
 private DefaultListModel listModel2;
 private JButton confirmBtn;
 private JScrollPane paneA;
 private JScrollPane paneB;

 {
  //Set Look & Feel
  try {
  javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
  } catch(Exception e) {
  e.printStackTrace();
  }
 }


 /**
 * Auto-generated main method to display this JFrame
 */
 public static void main(String[] args) {
  ListFrame inst = new ListFrame();
  inst.setVisible(true);
 }
 
 public ListFrame() {
  super();
  initGUI();
 }
 
 private void initGUI() {
  try {
  setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  paneA = new JScrollPane();
  paneB = new JScrollPane();
  getContentPane().setLayout(null);
  getContentPane().add(paneA);
  getContentPane().add(paneB);
  this.setTitle("光缆熔接");
   
  {
  listModel1 = new DefaultListModel();
  listModel1.addElement("1");
  listModel1.addElement("2");
  listModel1.addElement("3");
  listModel1.addElement("4");
  listModel1.addElement("5");
  listModel1.addElement("6");
  listModel1.addElement("7");
  listModel1.addElement("8");
  jList1 = new JList(listModel1);
   
  paneA.setBounds(30, 28, 130, 250);
  paneA.setViewportView(jList1);
  }
  {
  listModel2 = new DefaultListModel();
  listModel2.addElement("B1 : 你");
  listModel2.addElement("B2 : 是");
  listModel2.addElement("B3 : 哪");
  listModel2.addElement("B4 : 里");
  listModel2.addElement("B5 : 人");
  jList2 = new JList(listModel2);
  jList2.addMouseMotionListener(new MouseMotionListener() {

String exchange1 = "";
String exchange2 = "";
int index1 = -1;
int index2 = -1;

public void mouseMoved(MouseEvent e) {

}
public void mouseDragged(MouseEvent e) {

}
});
   
  paneB.setBounds(330, 28, 130, 250);
  paneB.setViewportView(jList2);
   
  }
  {
  jButton1 = new JButt