使用鼠标拖曳的方式来实现比较难 可以用eclipse中Properties->Java Build Path->Order and Export添加两个按钮一样的方式 或者在list上用个JPopupMenu来操作
import java.awt.BorderLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener;import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener;public class Test { public static void main(String[] args) { ListFrame f = new ListFrame(); f.setSize(600, 400); f.setTitle("Test"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }class ListFrame extends JFrame {
/** * */ private static final long serialVersionUID = 1L; private int first; private int sec;
public ListFrame() { JPanel panel = new JPanel(); this.getContentPane().add(panel, BorderLayout.CENTER); final DefaultListModel m = new DefaultListModel (); m.addElement("A"); m.addElement("B"); m.addElement("C"); final JList list = new JList(m); list.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub
} public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub
} public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub first = list.locationToIndex(e.getPoint()); } public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub sec = list.locationToIndex(e.getPoint()); if ( sec != -1) { if ( first != sec ) { String s1 = m.getElementAt(first).toString(); String s2 = m.getElementAt(sec).toString(); m.setElementAt(s1, sec); m.setElementAt(s2, first);
可以用eclipse中Properties->Java Build Path->Order and Export添加两个按钮一样的方式
或者在list上用个JPopupMenu来操作
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;public class Test {
public static void main(String[] args) {
ListFrame f = new ListFrame();
f.setSize(600, 400);
f.setTitle("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}class ListFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private int first;
private int sec;
public ListFrame() {
JPanel panel = new JPanel();
this.getContentPane().add(panel, BorderLayout.CENTER); final DefaultListModel m = new DefaultListModel ();
m.addElement("A");
m.addElement("B");
m.addElement("C");
final JList list = new JList(m); list.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
} public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
} public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
} public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
first = list.locationToIndex(e.getPoint());
} public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
sec = list.locationToIndex(e.getPoint());
if ( sec != -1) {
if ( first != sec ) {
String s1 = m.getElementAt(first).toString();
String s2 = m.getElementAt(sec).toString();
m.setElementAt(s1, sec);
m.setElementAt(s2, first);
list.clearSelection();
}
}
}
});
panel.add(list);
}
}
给你个思路
然后又查了它的文档,JList、JTree等等swing组件都早就已经支持drag
楼主这个完全可以实现,都不用自己写多少代码
先自己去查吧,查不着我再给你源码