列表框空间JList的用法演示

package 列表框控件演示;

import java.awt.Color;
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.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;

public class MyFrame extends JFrame implements ActionListener {

	//下面是DefaultListModel的私有变量
	private DefaultListModel sourceModel;
	private DefaultListModel destModel;

	//创建两个JList类型的变量
	private JList source;			//尚未初始化
	private JList dest = new JList();//初始化

	//创建两个按钮对象
	private JButton addButton = new JButton(">>");
	private JButton removeButton = new JButton("<<");

	//有参数的构造函数
	public MyFrame(String title) {

		super(title);//把此字符串传递给父类的构造函数显示在窗体的标题栏

		//好在SWing API的设计者想出了用于事件处理的适配器Adapter类,从而省却实现众多接口方法的麻烦,以下是匿名内部类
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e){//实现此方法,以此来优雅的终止程序
				System.exit(0);
			}
		});

		//创建DufaultListModel类的一个实例
		sourceModel = new DefaultListModel();

		//向创建的数据模型中添加几个String类型的选项
		sourceModel.addElement("Banana");
		sourceModel.addElement("Apple");
		sourceModel.addElement("Orange");
		sourceModel.addElement("Mango");
		sourceModel.addElement("Pineapple");
		sourceModel.addElement("Kiwi");
		sourceModel.addElement("Strawberry");
		sourceModel.addElement("Peach");
		//创建一个JList实例然后将先前创建的数据模型作为参数传递给JList的构造函数
		source = new JList(sourceModel);//这种先前没有实例化的

		//为源列表框设置选择模式:单选模式
		source.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		//
		source.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.DARK_GRAY,5),""+"Shop",0,0,null,Color.RED));
		//设置初始化列表框中选中的第一个选项
		source.setSelectedIndex(0);
		source.setSelectionBackground(Color.BLACK);
		source.setSelectionForeground(Color.WHITE);

		//创建另一个列表框的数据模型
		destModel = new DefaultListModel();

		dest.setModel(destModel);//这种是先前创建好了实例对象的
		dest.setSelectionBackground(Color.BLACK);
		dest.setSelectionForeground(Color.WHITE);
		dest.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.DARK_GRAY,5),""+"Fruit Basket",0,0,null,Color.RED));

		//提示:通过创建数据模型,允许在程序运行时替换列表框中的内容

		//建立GUI:用户界面的创建
		//使用面板的目的是用作放置组件的容器
		JPanel panel = new JPanel();
		//为面板设置布局管理器为网格布局4行1列
		panel.setLayout(new GridLayout(4,1,20,20));
		panel.add(new JLabel());//第1行为空的即标签
		panel.add(addButton);
		panel.add(removeButton);
		panel.add(new JLabel());//最后一行为空的即用标签来显示在面板上
		//为窗口设置布局管理器为网格布局1行3列
		this.setLayout(new GridLayout(1,3,20,20));
		add(source);
		add(panel);
		add(dest);

		//注册事件监听器:这是最后需要完成的一件事情,就是为按钮添加事件监听器
		addButton.addActionListener(this);
		removeButton.addActionListener(this);
	}

	//以下是按钮的事件处理代码
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource().equals(addButton))
		{
			if(source.getSelectedValue()!=null)//调用JList类的getSelectedValue()方法
			{
				String str=(String)source.getSelectedValue();
				if(str!=null)
				{
					destModel.addElement(str);
					dest.setSelectedIndex(0);
					sourceModel.removeElement(str);
					source.setSelectedIndex(0);
				}
			}
		}
		if(e.getSource().equals(removeButton))
		{
			if(dest.getSelectedValue()!=null)
			{
				String str=(String)dest.getSelectedValue();
				if(str!=null)
				{
					sourceModel.addElement(str);
					source.setSelectedIndex(0);
					destModel.removeElement(str);
					dest.setSelectedIndex(0);
				}
			}
		}

	}

}

下面是测试的类:

package 列表框控件演示;

public class ListDemoApp {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyFrame frame = new MyFrame("list Demo");
		frame.setBounds(20,50,400,300);//(x,y,width,heigth)
		//frame.setSize(400,300);(width,heigth)
		frame.setVisible(true);

	}

}
时间: 2024-10-13 02:29:49

列表框空间JList的用法演示的相关文章

Java Swing界面编程(30)---列表框:JList

列表框可以同时将多个选项信息以列表的方式展现给用户,使用JList可以构建一个列表框. package com.beyole.util; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Vector; import javax.swing.BorderFact

Java Swing编程接口(30)---列表框:JList

列表框同时可以在信息呈现给用户的列表多个选项,使用JList能够建立一个列表框. package com.beyole.util; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Vector; import javax.swing.BorderFactory

java GUI编程(swing)之四swing下拉框,列表框,滚动窗口

下拉框(JComboBox) 列表框(JList) 滚动窗口(JScrollPane) package gui; import java.awt.GridLayout; import javax.swing.*; /** * 下拉框,列表框,窗口滚动 * Created by admin on 2017/7/9. */ public class Scroll extends JFrame{ // 定义需要用到的组件 private JList jList; private JComboBox j

C#列表框、复选列表框、组合框的用法实例

本文实例讲述了C#列表框.复选列表框.组合框的用法.分享给大家供大家参考.具体分析如下: 功能实现效果如下图所示: 实现代码: 1.声明相关变量存储专业.课程设置及相关信息: 代码如下: string gr, msg, xy; string[] spec, cour1, cour2, cour3, cour4, cour5; 2.在Form1类中自定义函数bool checkGR()检查学生信息: 代码如下: private bool checkGR() { bool check = true;

GUI JList列表框练习二

package swing; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.Vector; public class sandemo2 extends JFrame{ JList list1,list2; Container container; public sandemo2() { container=this.getContentPane(); this.setLayou

GUI JList列表框练习

package swing; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; public class sandemo extends JFrame{ JList list1,list2; Container container; sandemo(){ container=this.getContentPane(); list1=new JList(); S

java界面编程(9) ------ 列表框

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 列表框和JComboBox组合框明显不同,这不仅仅是体现在外观上.当激活JComboBox组合框时,会出现下拉列表:而JList总是在屏幕上占据固定行的空间,大小也不会改变.如果要得到列表框中被选中的项目,只需调用getSelectValues(),它可以产生一个字符串数组,里面是被选中的项目名称. 另外,JList组件也允许多重选择,要是按住ctrl键,连续在多个项目上单击,

java在线聊天项目1.3版 ——设计好友列表框功能

设计好友列表框功能,思路-- 1.当客户端成功登陆后,则客户端把成功登陆信息发送给服务端, 2.由服务端将接收到来自各个成功登陆的客户端的用户信息添加进好友列表, 3.每当有成功登陆的用户就向各个客户端发送完整好友列表 4.好友列表窗要一直死循环着等待接收服务端不断发来的好友列表信息 注意:登陆窗退出时不要关闭socket 聊天窗退出时不要关闭socket 重新整合服务端各种服务到server 类中,只要服务端一开,即可接收客户端的各种请求(登陆.注册.聊天等) 1.3版客户端代码做了登陆成功后

[备忘]不用许可证 多线程直接操作界面组件比如超级列表框的实现

平时多线程来操作界面组件 同时写入或者修改数据  比如常见的把多个线程都把日志同时写入到编辑框 又或者 多个线程同时的修改一个超级列表框上的线程状态和其他信息 这样会出现一个问题 如何避免多个线程同时操作一个组件导致的组件冲突问题 我们常用的是使用许可证来给每个线程规定访问顺序来依次执行 不过这样的调整的确从效率上说很低下 大漠老师使用 发送消息 或者说是使用window消息机制来实现不加许可证的同时修改界面组件的思路非常好 511遇见老师也对这个思路进行了深度解析 已经非常的详细了http:/