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

Wallance_1979 2009-04-21 11:34:40
我现在要实现的一个功能是用swing实现移动两个list框里面的数据,比如选定A框里的一个item,把它移动到B框里或相反。要实现这个功能用什么对象比较好?JList,JComboBox,还是??
...全文
111 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上添加鼠标事件

62,614

社区成员

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

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