用swing怎么实现相互移动两个list框里的数据?

Wallance_1979 2009-04-21 11:34:40
我现在要实现的一个功能是用swing实现移动两个list框里面的数据,比如选定A框里的一个item,把它移动到B框里或相反。要实现这个功能用什么对象比较好?JList,JComboBox,还是??
...全文
118 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
365810247 2009-07-23
  • 打赏
  • 举报
回复
package com.sea.iframe.ship;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EtchedBorder;

import com.sea.iframe.others.SeamanLogger;

/**
* 证书选择框
*
* @author cy_小杨
*
*/
public class CertificateJFrame extends JFrame {

private static final long serialVersionUID = 1L;
private final JPanel panelBase = new JPanel();
private final JPanel panelBttom = new JPanel();
private final JButton btnConfirm = new JButton();
private final JButton btnCancel = new JButton();
private final JPanel panelLeft = new JPanel();
private final JPanel panelCenter = new JPanel();
private final JPanel panelRight = new JPanel();
private final JScrollPane scrollPaneLeft = new JScrollPane();
private final JScrollPane scrollPaneRight = new JScrollPane();

private final JButton btnCancelSelect = new JButton();
private final JButton btnSelect = new JButton();

private String[] certificateArray = null;

DefaultListModel leftModel = new DefaultListModel();
DefaultListModel rightMOdel = new DefaultListModel();
private final JList leftList = new JList(leftModel);
private final JList rightList = new JList(rightMOdel);

private AddShipJFrame addShipJFrame;

/**
* 测试
*
* @param args
*/
public static void main(String args[]) {
try {

String[] array = new String[] { "aaa", "ddd", "bbb", "ccc", "eee",
"fff", "ggg", "rrr", "www", "qqq", "yyy", "uuu", "hhh",
"jjj", "kkk", "lll", "mmm", "nnn", "bbb", "vvv" };

AddShipJFrame addShipJFrame = new AddShipJFrame();
CertificateJFrame frame = new CertificateJFrame(array,
addShipJFrame, array);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
SeamanLogger.getLogger().debug(e.toString());
}
}

/**
* 构造方法
*/
public CertificateJFrame(String[] certificateArrays,
AddShipJFrame addShipJFrame, String[] selectCertificateArray) {
super();

this.certificateArray = certificateArrays;
this.addShipJFrame = addShipJFrame;

initCertificate(certificateArray, selectCertificateArray);

setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
try {
jbInit();
addData();// 注册事件
} catch (Throwable e) {
e.printStackTrace();
SeamanLogger.getLogger().debug(e.toString());
}
}

/**
* 初始化
*
* @throws Exception
*/
private void jbInit() throws Exception {
getContentPane().setLayout(new BorderLayout());
setTitle("选择上船所需证书");
setResizable(false);

getContentPane().add(panelBase, BorderLayout.CENTER);
panelBase.setLayout(null);

panelBase.add(panelLeft);
panelLeft.setBounds(0, 0, 195, 293);
panelLeft.setLayout(new BorderLayout());

panelLeft.add(scrollPaneLeft);

scrollPaneLeft.setViewportView(leftList);

panelBase.add(panelCenter);
panelCenter.setBounds(193, 0, 105, 293);
final FlowLayout flowLayout_1 = new FlowLayout();
flowLayout_1.setVgap(80);
panelCenter.setLayout(flowLayout_1);
panelCenter.setPreferredSize(new Dimension(0, 0));

panelCenter.add(btnSelect);
btnSelect.addActionListener(new BtnSelectActionListener());
btnSelect.setText(" — — > ");

panelCenter.add(btnCancelSelect);
btnCancelSelect.addActionListener(new BtnCancelSelectActionListener());
btnCancelSelect.setText(" < — — ");

panelBase.add(panelRight);
panelRight.setBounds(299, 0, 195, 293);
panelRight.setLayout(new BorderLayout());

panelRight.add(scrollPaneRight);

scrollPaneRight.setViewportView(rightList);

getContentPane().add(panelBttom, BorderLayout.SOUTH);
final FlowLayout flowLayout = new FlowLayout();
flowLayout.setHgap(40);
panelBttom.setLayout(flowLayout);
panelBttom.setPreferredSize(new Dimension(0, 50));
panelBttom.setBorder(new EtchedBorder(EtchedBorder.LOWERED));

panelBttom.add(btnConfirm);
btnConfirm.addActionListener(new BtnConfirmActionListener());
btnConfirm.setText("确定");

panelBttom.add(btnCancel);
btnCancel.addActionListener(new BtnCancelActionListener());
btnCancel.setText("取消");

this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}

/**
* 注册事件
*/
private void addData() {
mouseClick(rightList);
mouseClick(leftList);
btnCancelSelect.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
leftItem();
}

});

/**
* 选择
*/
btnSelect.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
rightItem();
}
});
}

/**
* 取得所选择的证书集合
*
* @return 上船必须的证书
*/
public String[] getSelectCertificate() {

Object[] objects = ((DefaultListModel) rightList.getModel()).toArray();

if (objects.length > 0) {

String[] certificate = new String[objects.length];
for (int i = 0; i < objects.length; i++) {
certificate[i] = String.valueOf(objects[i]);
}
return certificate;
} else {
return null;
}

}

/**
* 鼠标双击选择
*
* @param list
* 双击选择的JList
*/
public void mouseClick(final JList list) {
list.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (e.getClickCount() == 2) {
if (list == leftList) {
rightItem();
} else {
leftItem();
}

}
}
});
}

/**
* 初始化证书
*/
private void initCertificate(String[] certificateArray,
String[] selectCertificateArray) {

for (String certificate : certificateArray) {

((DefaultListModel) leftList.getModel()).addElement(certificate);
}

if (selectCertificateArray != null) {

for (String selectCertificate : selectCertificateArray) {

((DefaultListModel) leftList.getModel())
.removeElement(selectCertificate);

((DefaultListModel) rightList.getModel())
.addElement(selectCertificate);
}
}
}

/**
* 取消所选择的证书
*/
private void leftItem() {
if (rightList.getSelectedIndex() != -1) {
Object o = rightList.getSelectedValue();
((DefaultListModel) rightList.getModel()).remove(rightList
.getSelectedIndex());
((DefaultListModel) leftList.getModel()).addElement(o);
}
}

/**
* 选择证书
*/
private void rightItem() {
if (leftList.getSelectedIndex() != -1) {
Object o = leftList.getSelectedValue();
((DefaultListModel) leftList.getModel()).remove(leftList
.getSelectedIndex());
((DefaultListModel) rightList.getModel()).addElement(o);
}

}

/**
* 确定选择
*
* @author cy_小杨
* @version 1.0
*
*/
private class BtnConfirmActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
btnConfirm_actionPerformed(e);
}
}

/**
* 取消选择
*
* @author cy_小杨
* @version 1.0
*
*/
private class BtnCancelActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
btnCancel_actionPerformed(e);
}
}

/**
* 选择证书
*
* @author cy_小杨
* @version 1.0
*
*/
private class BtnSelectActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
btnSelect_actionPerformed(e);
}
}

/**
* 取消所选择的证书
*
* @author cy_小杨
* @version 1.0
*
*/
private class BtnCancelSelectActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
btnCancelSelect_actionPerformed(e);
}
}

/**
* 确定
*
* @param e
*/
protected void btnConfirm_actionPerformed(ActionEvent e) {
String[] arrayCertificate = getSelectCertificate();

if (arrayCertificate != null) {
addShipJFrame.setSelectCertificate(arrayCertificate);
addShipJFrame.certificateID = addShipJFrame.getCertificateID();
}
this.setVisible(false);
}

/**
* 取消
*
* @param e
*/
protected void btnCancel_actionPerformed(ActionEvent e) {
this.dispose();
}

/**
* 选择证书
*
* @param e
*/
protected void btnSelect_actionPerformed(ActionEvent e) {
}

/**
* 取消所选择的证书
*
* @param e
*/
protected void btnCancelSelect_actionPerformed(ActionEvent e) {
}

}
yanghartai 2009-07-14
  • 打赏
  • 举报
回复
JList( View ) + Vector (Data)
GeekZFZ 2009-04-28
  • 打赏
  • 举报
回复
看看完整代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;

public class MyList extends JFrame{
private static final long serialVersionUID = 1L;
private JLabel lab1,lab2;
private JButton but[];
private JList list1,list2;
private String str[]={"aa","bb","cc","dd","ee","ff"};
private DefaultListModel model1,model2;


public MyList(){
super("MyList");
this.setLayout(null);
this.setBounds(200,200,500,300);
//标签lab1
lab1=new JLabel("list1");
lab1.setBounds(60,10,50,30);
this.add(lab1);
//列表list1
model1=new DefaultListModel();
list1=new JList(model1);
list1.setBounds(50,50,50,120);
for(int i=0;i<str.length;i++){
model1.addElement(str[i]);
}

this.add(list1);
//按钮组
but=new JButton[4];
but[0]=new JButton(">");
but[1]=new JButton("<");
but[2]=new JButton(">>");
but[3]=new JButton("<<");
for(int i=0;i<but.length;i++){
but[i].addActionListener(new Handler());
but[i].setBounds(150,50+i*32,50,30);
this.add(but[i]);
}
//标签list2
lab2=new JLabel("list2");
lab2.setBounds(260,10,50,30);
this.add(lab2);
//列表list2
model2=new DefaultListModel();
list2=new JList(model2);
list2.setBounds(250,50,50,120);

this.add(list2);




this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String []args){
new MyList();
}
class Handler implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(e.getSource()==but[0]){
while(!list1.isSelectionEmpty()){
model2.addElement(list1.getSelectedValue());
model1.removeElement(list1.getSelectedValue());
}

}
if(e.getSource()==but[1]){
while(!list2.isSelectionEmpty()){
model1.addElement(list2.getSelectedValue());
model2.removeElement(list2.getSelectedValue());
}
}
if(e.getSource()==but[2]){

for(int i=0;i<model1.size();i++){
model2.addElement(model1.getElementAt(i));
}
model1.removeAllElements();

}
if(e.getSource()==but[3]){

for(int i=0;i<model2.size();i++){
model1.addElement(model2.getElementAt(i));
}
model2.removeAllElements();

}

}

}

}
njclsc 2009-04-28
  • 打赏
  • 举报
回复
楼上的几位都可以实现 ,好方法
caihang 2009-04-24
  • 打赏
  • 举报
回复
用 jlist。然后就可以了。然后结合vector类
wunan320 2009-04-24
  • 打赏
  • 举报
回复
JList,JComboBox都可以,看界面需要什么控件了。
A、B两个控件。
可以通过按钮的事件,把A选择的item,从A中删除,在B中增加。
也可以用drag,同上。
leeson11111 2009-04-24
  • 打赏
  • 举报
回复
现个JList,加几个按钮。一个add一个remove。
yyc6219869 2009-04-23
  • 打赏
  • 举报
回复
使用JList,加几个按钮,实现点击事件。
shmilycharlene 2009-04-23
  • 打赏
  • 举报
回复
使用两个JList来实现,

写一个ListModel出来,可以继承AbstractListModel类,然后重写其中的方法,这样完全可以实现,注意在JList上添加鼠标事件
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端 JOpenID JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端 JOpenID JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧