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

Wallance_1979 2009-04-21 11:34:40
我现在要实现的一个功能是用swing实现移动两个list框里面的数据,比如选定A框里的一个item,把它移动到B框里或相反。要实现这个功能用什么对象比较好?JList,JComboBox,还是??
...全文
169 9 打赏 收藏 转发到动态 举报
写回复
用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上添加鼠标事件
源码链接: https://pan.quark.cn/s/8ddf8a1c92f9 **libcurl用于获取大型文件**libcurl作为一个开源的C语言库,提供了一系列的API来处理与URL相关的任务,涵盖了HTTP、FTP、SMTP等多种网络协议的应用。在执行大型文件的下载操作时,libcurl展现出卓越的性能表现和高度的灵活性,能够高效地管理大文件传输过程,有效预防内存溢出及其他潜在问题。**libcurl的基础操作**libcurl的基础应用包括以下几个环节:1. **初始化**:需要借助`curl_global_init()`函数来启动libcurl的工作环境。2. **建立会话句柄**:通过`curl_easy_init()`函数创建一个会话句柄,该句柄将用于后续所有的操作流程。3. **配置选项**:运用`curl_easy_setopt()`函数来设定多种参数,例如目标URL、超时时间、重试次数以及数据写入的回调函数等。4. **执行请求**:调用`curl_easy_perform()`函数来实施下载操作。5. **释放资源**:使用`curl_easy_cleanup()`函数来释放已经占用的资源。**获取大型文件时的重要设置**1. **数据写入回调函数**:在处理大型文件下载时,通常不希望一次性将整个文件载入内存。可以配置`CURLOPT_WRITEFUNCTION`选项,指定一个回调函数来处理接收到的数据片段,这样libcurl在接收到数据时会调用该函数,使得我们可以按需将数据写入文件或缓冲区。2. **缓冲策略**:可以设定缓冲区的大小(比如,通过`CURLOPT_BUFFERSIZE`),来控制每次接收数据的数量,从而优化内存...
内容概要:本文档整合了《鬼谷子·决篇》与《三略·审权变第三》《差德行第四》三大古代智慧典籍,构建了一套“决策+形势+用人”三位一体的领导力提升体系。通过28天三合实战路径、三维诊断工具、9个实用模板及独特的“身体锚点”仪式,系统解决管理者在决策犹豫、形势误判、人岗错配等方面的痛点。全文涵盖理论溯源、方法论拆解(如三步决策法、审权变四步法、差德行四步法)、历史案例对照(范蠡 vs 项羽)以及跨资源联动建议,形成从认知到实践的完整闭环。; 适合人群:中基层管理者、创业者、职场进阶者,尤其是面临决策困境、环境适应困难或团队用人问题的人群;具备一定管理经验或自我提升意识的个体亦可受益。; 使用场景及目标:① 提升重大事项的决策质量,避免反复纠结与事后后悔;② 增强对外部环境变化的敏感度与应对能力,实现灵活调整;③ 科学评估人才德才素质,实现人岗精准匹配,减少用人失误;④ 构建个人化的决策-应变-用人标准化流程(SOP)。; 阅读建议:建议按照28天路径逐步实践,结合自测表定位短板,优先突破薄弱模块;配套工具模板需实际填写使用,配合身体锚点仪式强化行为记忆;可与“诸葛亮决策术”“立将威信术”等单品联动,全面提升领导力体系。

62,622

社区成员

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

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