Requirements
在第一个列表框中添加北京、上海、天津、江苏、浙江、广东6个选项,
当双击两个列表框,可实现将当前列表框中的选中的选项添加到另一个列表框中,并从当前列表框中删除该选项。
如图:
API
mouseListener.getClickCount()
获取鼠标点击次数setListData(Vector<E>)
或setListData(E[])
更新列表项数据
Code
// 实现接口:MouseListener,监听双击事件
class MyFrame extends JFrame implements MouseListener {
Vector<String> leftData;
Vector<String> rightData;
JList<String> left, right;
JScrollPane leftPanel, rightPanel;
MyFrame() {
leftData = new Vector<>(Arrays.asList("北京、上海、天津、江苏、浙江、广东".split("、")));
left = new JList<>(leftData);
leftPanel = new JScrollPane(left);
rightData = new Vector<>();
right = new JList<>();
rightPanel = new JScrollPane(right);
setLayout(new GridLayout(1, 2));
add(leftPanel);
add(rightPanel);
left.addMouseListener(this);
right.addMouseListener(this);
setVisible(true);
setSize(300, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
* 点击鼠标事件
* @param e
*/
@Override
public void mouseClicked(MouseEvent e) {
int clickCount = e.getClickCount();
if (clickCount == 2) {
doubleClick(e);
}
}
private void doubleClick(MouseEvent e) {
Object source = e.getSource();
if (source == left) {
move(left, leftData, right, rightData);
} else if (source == right) {
move(right, rightData, left, leftData);
}
}
private void move(JList<String> from, Vector<String> fromData, JList<String> to, Vector<String> toData) {
toData.add(from.getSelectedValue()); // 先添加选中的元素到另一边
fromData.remove(from.getSelectedIndex()); // 点击的一边删除选中元素
to.setListData(toData); // 刷新数据
from.setListData(fromData);
}
// 按压鼠标
@Override
public void mousePressed(MouseEvent e) {}
// 释放|松开鼠标
@Override
public void mouseReleased(MouseEvent e) {}
// 鼠标移入
@Override
public void mouseEntered(MouseEvent e) {}
// 鼠标移出
@Override
public void mouseExited(MouseEvent e) {}
}
运行:
public class Test {
public static void main(String[] args) {
new MyFrame();
}
}