java swing 中的列表框JList如何在程序中动态的添加和删除元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java swing 中的列表框JList如何在程序中动态的添加和删除元素相关的知识,希望对你有一定的参考价值。

java swing 中的列表框JList如何实现在程序中动态的添加和删除元素呢?比方说我选中列表框里的某一项或者某些项,然后点击一个按钮,这个按钮的处理事件就是删除这个列表框里选定的元素,然后还要对已删除的元素进行后边处理,比如可能还要添加到另一个列表中。不知道该怎么实现,主要是列表的动态改变,删除或增加元素,最好能有个例子,做毕设用的,急,希望高手赐教!

package test;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.WindowConstants;

public class ListFrame extends javax.swing.JFrame
private JList jList1;
private JButton jButton1;
private JButton jButton2;
private JList jList2;
private DefaultListModel listModel1;
private DefaultListModel listModel2;
private JButton jButton4;
private JButton jButton3;


//Set Look & Feel
try
javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
catch(Exception e)
e.printStackTrace();



/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args)
ListFrame inst = new ListFrame();
inst.setVisible(true);


public ListFrame()
super();
initGUI();


private void initGUI()
try
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);

listModel1 = new DefaultListModel();
listModel1.addElement("item 1");
listModel1.addElement("item 2");
listModel1.addElement("item 3");
listModel1.addElement("item 4");
listModel1.addElement("item 5");
listModel1.addElement("item 6");
jList1 = new JList(listModel1);
getContentPane().add(jList1);
jList1.setBounds(42, 28, 119, 203);


listModel2 = new DefaultListModel();
jList2 = new JList(listModel2);
getContentPane().add(jList2);
jList2.setBounds(238, 28, 119, 196);


jButton1 = new JButton();
getContentPane().add(jButton1);
jButton1.setText(">");
jButton1.setBounds(168, 84, 63, 28);
jButton1.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
jButton1ActionPerformed(evt);

);


jButton2 = new JButton();
getContentPane().add(jButton2);
jButton2.setText("<");
jButton2.setBounds(168, 133, 63, 28);
jButton2.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
jButton2ActionPerformed(evt);

);


jButton3 = new JButton();
getContentPane().add(jButton3);
jButton3.setText("添加");
jButton3.setBounds(168, 35, 63, 28);
jButton3.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
jButton3ActionPerformed(evt);

);


jButton4 = new JButton();
getContentPane().add(jButton4);
jButton4.setText("删除");
jButton4.setBounds(168, 189, 63, 28);
jButton4.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent evt)
jButton4ActionPerformed(evt);

);

pack();
setSize(400, 300);
setLocationRelativeTo(null);
catch (Exception e)
e.printStackTrace();


/** jList1移动到jList2*/
private void jButton1ActionPerformed(ActionEvent evt)
if(jList1.getSelectedIndex()!=-1)
listModel2.addElement(jList1.getSelectedValue());
int i=jList1.getSelectedIndex();
listModel1.remove(i);
jList1.setSelectedIndex(i>0? i-1:0);
jList2.setSelectedIndex(listModel2.size()-1);


/** jList2移动到jList1*/
private void jButton2ActionPerformed(ActionEvent evt)
if(jList2.getSelectedIndex()!=-1)
listModel1.addElement(jList2.getSelectedValue());
int i=jList2.getSelectedIndex();
listModel2.remove(i);
jList2.setSelectedIndex(i>0? i-1:0);


/** jList1增加项*/
private void jButton3ActionPerformed(ActionEvent evt)
listModel1.addElement("new item");

/** jList1删除项*/
private void jButton4ActionPerformed(ActionEvent evt)
if(jList1.getSelectedIndex()!=-1)
listModel1.remove(jList1.getSelectedIndex());




参考技术A 写的比较草,添了些注释
有问题给我发信息吧

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class TestJList extends JFrame implements ActionListener
JList jl;
JScrollPane jsp;// 滑块
DefaultListModel dlm;// Jlist里面的内容的对象
JButton jb1;// 删除按钮
JButton jb2;// 添加按钮
JPanel jp;// 放2个按钮的panel
JPanel jp2;// 放文本框的panel
JTextField jtf;// 文本框,用于输入要插入的文字

public TestJList()
// TODO Auto-generated constructor stub
jb1 = new JButton("删除");
jb2 = new JButton("添加");
jp = new JPanel();
jp2 = new JPanel();
jtf = new JTextField("请在这里输入想添加的内容");
dlm = new DefaultListModel();
jl = new JList(dlm);// 创建一个包含DefaultListModel的Jlist
jsp = new JScrollPane(jl);// 创建一个包含Jlist的滑块

// 以下是布局,大体就是把按钮添加到panel,把panel添加到窗体
jp.setLayout(new FlowLayout());
jp.add(jb1);
jp.add(jb2);
jp2.setLayout(new FlowLayout());
jp2.add(jtf);
setLayout(new GridLayout(3, 1));
add(jsp);
add(jp2);
add(jp);
jb1.addActionListener(this);// 把监听注册个按钮
jb2.addActionListener(this);// 把监听注册个按钮

setSize(200, 400);
setVisible(true);
// 添加一个点击右上“叉”关闭窗口的事件
addWindowListener(new WindowAdapter()
public void windowClosing(WindowEvent e)
System.exit(0); // 关闭

);



// 添加一个按钮的监听
public void actionPerformed(ActionEvent e)
// TODO Auto-generated method stub

// 如果按的是删除按钮
if (e.getSource() == jb1)
// 移除当前选择的内容
dlm.remove(jl.getSelectedIndex());


// 如果按的是田间按钮
if (e.getSource() == jb2)
// 吧文本框中的内容添加到列表
dlm.addElement(jtf.getText());




// 测试主函数
public static void main(String[] args)
TestJList tj = new TestJList();

参考技术B 简单。
DefaultListModel model = new DefaulatListModel();
JList list = new JList(model);
model方法跟向量基本一致,model怎么添加删除list就怎么变。
list.isSelectedIndex()表示一个元素是否被选。

JAVA swing常用组件

在图形用户界面编程中,我们常常会提供用户登陆界面,比如登陆到会员管理系统、登陆到工资管理系统、仓库管理系统...

 

常用组件

Ⅰ.文本框(JTextField)

Ⅱ.密码框(JPasswordField)

Ⅲ.标签(JLable)

Ⅳ.复选框(JCheckBox)

Ⅴ.单选框(JRadioButton)

Ⅵ.组合单选框(ButtonGroup)

Ⅶ.下拉框(JComboBox)

Ⅷ.列表(JList)

Ⅸ.滚动窗格组件(JScrollPane)

Ⅹ.多行文本框(JTextArea)

ⅩⅠ.选项卡(JTabbedPane)

 

实例

简单会员管理系统登录界面

 1 /*
 2  * 作者:白客C
 3  * 时间:2020年03月05日
 4  * 内容:gui窗体
 5  * 步骤:
 6  *  1.继承JFrame容器
 7  *  2.定义需要的组件
 8  *  3.创建组件
 9  *  4.设置布局管理器
10  *  5.添加组件
11  *  6.对窗体设置
12  *  7.显示窗体
13  */
14 
15 package com.beekc.www;
16 import java.awt.*;
17 import javax.swing.*;
18 
19 //继承JFrame
20 public class Beekc extends JFrame{
21 
22     //定义组件
23     JPanel jPanel1,jPanel2,jPanel3;
24     JLabel jlb1,jlb2;
25     JTextField jt;
26     JPasswordField jpssswd;
27     JButton jb1,jb2;
28 
29     public static void main(String[] args){
30         Beekc beekc = new Beekc();
31     }
32 
33     public Beekc(){
34         //创建组件
35         jPanel1 = new JPanel();
36         jPanel2 = new JPanel();
37         jPanel3 = new JPanel();
38 
39         jlb1 = new JLabel("用户");
40         jlb2 = new JLabel("密码");
41         jt = new JTextField(10);
42         jpssswd = new JPasswordField(10);
43         jb1 = new JButton("登录");
44         jb2 = new JButton("注册");
45 
46         //设置布局管理器
47         this.setLayout(new GridLayout(3,1));
48         //添加JPanel
49         jPanel1.add(jlb1);
50         jPanel1.add(jt);
51         jPanel2.add(jlb2);
52         jPanel2.add(jpssswd);
53         jPanel3.add(jb1);
54         jPanel3.add(jb2);
55         //JPanel添加到JFanel
56         this.add(jPanel1);
57         this.add(jPanel2);
58         this.add(jPanel3);
59 
60         //窗体设置
61         this.setTitle("会员管理系统");
62         this.setSize(270,150);
63         this.setResizable(false);
64         this.setLocation(200,200);
65         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
66 
67         //显示
68         this.setVisible(true);
69 
70     }
71 
72 }

 

用户注册界面

 1 /*
 2  * 作者:白客C
 3  * 时间:2020年03月06日
 4  * 内容:gui窗体
 5  * 步骤:
 6  *  1.继承JFrame容器
 7  *  2.定义需要的组件
 8  *  3.创建组件
 9  *  4.设置布局管理器
10  *  5.添加组件
11  *  6.对窗体设置
12  *  7.显示窗体
13  */
14 
15 package com.beekc.www;
16 
17 
18 import javax.swing.*;
19 import java.awt.*;
20 
21 //继承JFrame
22 public class Beekc extends JFrame {
23 
24     //定义组件
25     JPanel jPanel1,jPanel2,jPanel3;
26     JLabel jlb1,jlb2;
27     JCheckBox jc1,jc2,jc3;
28     JRadioButton jrb1,jrb2;
29     ButtonGroup bg;
30     JButton jb1,jb2;
31 
32     public static void main(String[] args){
33         Beekc beekc = new Beekc();
34     }
35 
36     //构造函数
37     public Beekc(){
38         //创建组件
39         jPanel1 =new JPanel();
40         jPanel2 =new JPanel();
41         jPanel3 =new JPanel();
42         bg = new ButtonGroup();
43 
44         jlb1 = new JLabel("你喜欢的运动");
45         jlb2 = new JLabel("性别");
46         jc1 =new JCheckBox("足球");
47         jc2 =new JCheckBox("篮球");
48         jc3 =new JCheckBox("排球");
49         jrb1 = new JRadioButton("男");
50         jrb2 = new JRadioButton("女");
51         jb1 = new JButton("注册");
52         jb2 = new JButton("取消");
53 
54         //设置布局管理器
55 
56         //JRadioButton添加ButtonGroup为一组
57         bg.add(jrb1);
58         bg.add(jrb2);
59 
60         //组件加到JPanel
61         jPanel1.add(jlb1);
62         jPanel1.add(jc1);
63         jPanel1.add(jc2);
64         jPanel1.add(jc3);
65         jPanel2.add(jlb2);
66         jPanel2.add(jrb1);
67         jPanel2.add(jrb2);
68         jPanel3.add(jb1);
69         jPanel3.add(jb2);
70         //布局
71         this.setLayout(new GridLayout(3,1));
72 
73         //添加组件
74         this.add(jPanel1);
75         this.add(jPanel2);
76         this.add(jPanel3);
77 
78         //对窗体设置
79         this.setTitle("用户注册");
80         this.setSize(270,150);
81         this.setResizable(false);
82         this.setLocation(200,200);
83         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
84 
85         //显示
86         this.setVisible(true);
87 
88 
89     }
90 
91 }

 

用户调查界面

 1 /*
 2  * 作者:白客C
 3  * 时间:2020年03月06日
 4  * 内容:gui窗体
 5  * 步骤:
 6  *  1.继承JFrame容器
 7  *  2.定义需要的组件
 8  *  3.创建组件
 9  *  4.设置布局管理器
10  *  5.添加组件
11  *  6.对窗体设置
12  *  7.显示窗体
13  */
14 
15 package com.beekc.www;
16 import java.awt.*;
17 import javax.swing.*;
18 
19 //继承JFrame
20 public class Beekc extends JFrame{
21 
22     //定义组件
23     JPanel jPanel1,jPanel2;
24     JLabel jlb1,jlb2;
25     JComboBox jcb;
26     JList jl;
27     JScrollPane jsp;
28 
29     public static void main(String[] args){
30         Beekc beekc = new Beekc();
31     }
32 
33     //构造函数
34     public Beekc(){
35         //创建组件
36         jPanel1 = new JPanel();
37         jPanel2 = new JPanel();
38         jlb1 = new JLabel("籍贯");
39         jlb2 = new JLabel("旅游地方");
40 
41         String[] strJComboBox = {"北京","天津","广东"};
42         jcb = new JComboBox(strJComboBox);
43 
44         String[] strJLIst = {"故宫","天安门","长城","颐和园"};
45         jl = new JList(strJLIst);
46         //设置显示多少个
47         jl.setVisibleRowCount(3);
48         jsp = new JScrollPane(jl);
49 
50         //设置布局管理器
51         //添加到JPanel
52         jPanel1.add(jlb1);
53         jPanel1.add(jcb);
54         jPanel2.add(jlb2);
55         jPanel2.add(jsp);
56 
57         this.setLayout(new GridLayout(1,2));
58 
59         //添加组件
60         this.add(jPanel1);
61         this.add(jPanel2);
62 
63         //对窗体设置
64         this.setTitle("用户调查");
65         this.setSize(270,110);
66         this.setResizable(false);
67         this.setLocation(200,200);
68         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
69 
70         //显示
71         this.setVisible(true);
72     }
73 
74 }

 

翻译软件界面

 1 /*
 2  * 作者:白客C
 3  * 时间:2020年03月06日
 4  * 内容:gui窗体
 5  * 步骤:
 6  *  1.继承JFrame容器
 7  *  2.定义需要的组件
 8  *  3.创建组件
 9  *  4.设置布局管理器
10  *  5.添加组件
11  *  6.对窗体设置
12  *  7.显示窗体
13  */
14 
15 package com.beekc.www;
16 import java.awt.*;
17 import javax.swing.*;
18 
19 //继承JFrame
20 public class Beekc extends JFrame{
21 
22     //定义组件
23     JSplitPane jsp;
24     JList jList;
25     JLabel jl1;
26 
27     public static void main(String[] args){
28         Beekc beekc = new Beekc();
29     }
30 
31     //构造函数
32     public Beekc(){
33         //创建组件
34         String[] words = {"bird","boy","girl"};
35         jList =new JList(words);
36         //new ImageIcon,存放图片
37         jl1 = new JLabel(new ImageIcon("images/jinshanciba.png"));
38         //拆分窗体
39         jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jList,jl1);
40         //可以收缩
41         jsp.setOneTouchExpandable(true);
42 
43         //设置布局管理器
44 
45         //添加组件
46         this.add(jsp);
47 
48         //窗体设置
49         this.setTitle("谷歌翻译");
50         this.setSize(760,480);
51         this.setLocation(200,200);
52         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
53 
54         //显示
55         this.setVisible(true);
56     }
57 }

 

聊天界面

 1 /*
 2  * 作者:白客C
 3  * 时间:2020年03月06日
 4  * 内容:gui窗体
 5  * 步骤:
 6  *  1.继承JFrame容器
 7  *  2.定义需要的组件
 8  *  3.创建组件
 9  *  4.设置布局管理器
10  *  5.添加组件
11  *  6.对窗体设置
12  *  7.显示窗体
13  */
14 
15 package com.beekc.www;
16 import java.awt.*;
17 import javax.swing.*;
18 
19 //继承JFrame
20 public class Beekc extends JFrame{
21 
22     //定义组件
23     JTextArea jTextArea;
24     JScrollPane jScrollPane;
25     JPanel jPanel;
26     JTextField jTextField;
27     JButton jButton;
28 
29     public static void main(String[] args){
30         Beekc beekc = new Beekc();
31     }
32 
33     //构造函数
34     public Beekc(){
35         //创建组件
36         jTextArea = new JTextArea();
37         jScrollPane = new JScrollPane(jTextArea);
38 
39         jPanel = new JPanel();
40         jTextField = new JTextField(20);
41         jButton = new JButton("发送");
42 
43         //设置布局管理器
44         //添加到JPanel
45         jPanel.add(jTextField);
46         jPanel.add(jButton);
47 
48         //添加组件
49         this.add(jScrollPane);
50         this.add(jPanel,BorderLayout.SOUTH);
51 
52         //窗体设置
53         this.setTitle("聊天界面");
54         this.setIconImage((new ImageIcon("images\\\\qq.png")).getImage());
55         this.setSize(320,270);
56         this.setLocation(200,200);
57         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
58 
59         //显示
60         this.setVisible(true);
61     }
62 
63 }

 

聊天登录界面

 

以上是关于java swing 中的列表框JList如何在程序中动态的添加和删除元素的主要内容,如果未能解决你的问题,请参考以下文章

GUI JList列表框练习

Java swing弹出菜单和jlist

是否可以更改 Java Swing jList 中项目的名称*显示*?

GUI JList列表框练习二

JAVA swing常用组件

如何在Java Swing中创建响应式JList