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

Wallance_1979 2009-04-21 11:34:40
我现在要实现的一个功能是用swing实现移动两个list框里面的数据,比如选定A框里的一个item,把它移动到B框里或相反。要实现这个功能用什么对象比较好?JList,JComboBox,还是??
...全文
173 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上添加鼠标事件
内容概要:本文系统研究了谐振式双有源桥(DAB)变换器的无传感模型预测控制(MPC)方法,旨在通过Simulink仿真平台实现无需电流传感器的高性能控制策略,从而提升系统可靠性并降低硬件成本。研究深入分析了串联谐振型DAB变换器的工作原理与数学建模过程,构建了完整的无电流传感MPC控制框架,重点解决了系统状态观测、预测模型构建、控制律设计及稳定性保障等关键问题。文中详细阐述了状态观测器的设计原理,实现了对关键电流状态的精确估计,并结合模型预测控制算法优化动态响应性能,有效应对功率波动与负载变化。通过对闭环系统的仿真验证,充分展示了该方法在动态性能、鲁棒性与控制精度方面的优越表现,为电力电子系统中先进控制策略的应用提供了可复现的技术路径。; 适合人群:具备电力电子技术、自动控制理论及Simulink仿真基础,从事新能源发电、储能系统、电动汽车、直流微网等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究无电流传感器条件下高动态性能DAB变换器的控制方案设计;②掌握模型预测控制与状态观测器在电力变换系统中的集成方法;③通过Simulink仿真复现先进控制策略,支撑高水平科研论文撰写、课题申报或实际工程项目开发。; 阅读建议:建议结合所提供的Simulink仿真模型进行动手实践,重点关注状态观测器与MPC控制器的参数设计与耦合关系,对照文中“完美复现”案例逐步调试,深入理解控制算法的实现细节与性能优化方法,以全面提升理论分析与工程应用能力。
内容概要:本文介绍了基于盛科CTC2118交换芯片及配套CTC21108 PHY套片设计的一款千兆以太网L2层交换产品,具备24个电口和4个光口,专为军工、武警、电力、铁路等高端工业领域打造。产品具有高可靠性、国产化、强加固等特点,支持宽温工作环境(-40℃~85℃/-40℃~70℃),采用强抗震高密度高速连接器,适用于车载、舰载、列车及电力等严苛应用场景。产品可适配加固型1U上架或防水型外壳,并支持根据用户需求进行载板定制或全定制设计。技术参数涵盖主控芯片、端口速率、光纤类型、供电电压及固件在线升级等功能。; 适合人群:从事军工、交通、能源等领域网络设备研发与集成的硬件工程师、系统架构师及技术决策人员;需要国产化、高可靠网络解决方案的行业用户。; 使用场景及目标:①应用于航空、航天、轨道交通等对环境适应性和稳定性要求高的场景;②满足电力、铁路等行业对千兆以太网交换能力及国产化合规性的需求;③作为核心通信模块部署于车载、舰载等振动强烈、温差大的复杂环境中; 阅读建议:重点关注产品的国产化配置、宽温性能与机械加固设计,结合实际项目需求选择合适型号,并利用其可定制特性优化系统集成方案。
内容概要:本文主要介绍了基于Simulink的三相电压型PWM整流器的建模与仿真研究,重点实现了PI双闭环控制结合解耦控制策略,并针对第四象限运行工况(即电动机回馈制动状态)进行了深入分析,其中直流侧电流呈现反向流动特性。通过仿真平台对系统在能量回馈状态下的动态响应、稳态性能及控制精度进行全面验证,展示了电流反向流动时的电压电流波形变化规律,体现了控制策略的有效性与系统运行的稳定性。该研究对于提升电力电子变换器在再生制动、可再生能源并网等应用场景中的能量转换效率和电能质量具有重要意义。; 适合人群:具备电力电子、自动控制理论基础,从事电气工程、新能源变换系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握三相PWM整流器在第四象限的能量回馈机理与运行特性;②理解PI双闭环与解耦控制的设计思路与实现方法;③学习Simulink环境下电力电子系统的建模、仿真与分析流程;④为实际工程中逆变器、变频器、储能变流器等设备的控制策略开发提供参考。; 阅读建议:建议结合电力电子技术、现代控制理论相关教材进行系统学习,重点关注坐标变换(如abc/dq变换)、控制器参数整定及仿真模型搭建细节,动手复现仿真模型以加深对控制逻辑与系统动态行为的理解。

62,622

社区成员

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

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