Swing中提供两种列表组件,分别是列表框(JList)和组合框(JComboBox)。

一、JList组件

构造方法:

public JList():构造一个空的、具有只读模型的JList。
public JList(Object[] listData):构造一个显示指定数组元素的JList。
public JList(Vector listData):构造一个 显示指定Vector中元素的JList 。
public Jlist(ListModel dataModel):根据指定的非null模型构造一个JList。

常用方法:

public int getItemCount():获取列表中的选项个数。
public void remove(int n):从列表的选项菜单中删除指定索引的选项。
public void removeAll():删除列表中的全部选项。
public int getSelectedIndex():返回最小的选择单元索引;只选择单个项时,返回该选择单元索引。
public int[] getSelectedIndices():返回所选的全部索引的数组(按升序排列)。
public List<E> getSelectedValuesList():根据列表中的索引,按照增加的顺序返回所有选定项目的列表。
public void setSelectionMode(int selectionMode):设置列表选择模型(参数0、1、2对应单个、连续多个、不连续多个)。

事件:

列表事件有两种:
一是鼠标双击某个选项:双击选项是动作事件,相关的接口是MouseListener,注册监视器的方法是addMouseListener(),接口方法是mouseClicked(MouseEvent e)。

二是鼠标单击某个选项:单击选项是选项事件,相关的接口是ListSelectionListener,注册监视器的方法是addListSelectionListener,接口方法是valueChanged(ListSelectionEvent e)。

代码示例:

package com.java.swing;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Iterator;
import java.util.Vector; import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener; public class JListTest extends JFrame { /**
*
*/
private static final long serialVersionUID = 1L; public JListTest() {
Container cp = this.getContentPane();
this.setTitle("JList列表框");
this.setBounds(0, 0, 250, 170);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
cp.setLayout(null); // 方法一
String[] contents = { "1java", "1数据结构", "1数据库", "1计算机系统", "1操作系统", "1C语言" };
JList<String> jl = new JList<>(contents);
jl.setBounds(20, 10, 100, 100);
jl.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
cp.add(jl); // // 方法二
// Vector<String> vector = new Vector<String>();
// JList<String> jl = new JList<>(vector);
// vector.add("2java");
// vector.add("2数据结构");
// vector.add("2数据库");
// vector.add("2计算机系统");
// vector.add("2操作系统");
// vector.add("2C语言"); // //方法三
// String[] contents = { "3java", "3数据结构", "3数据库", "3计算机系统", "3操作系统", "3C语言" };
// DefaultListModel<String> model = new DefaultListModel<String>();
// for(String content:contents)
// model.addElement(content);
// JList<String> jl = new JList<String>(model);
// jl.setBounds(20, 10, 100, 100);
// cp.add(jl); JScrollPane js1 = new JScrollPane(jl);
js1.setBounds(20, 10, 100, 100);
cp.add(js1); JTextArea area = new JTextArea();
JScrollPane js2 = new JScrollPane(area);
js2.setBounds(140, 10, 75, 100);
cp.add(js2); // 注册选项监视器
jl.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
// 获取列表选中的元素
java.util.List<String> values = jl.getSelectedValuesList();
area.setText(""); Iterator<String> it = values.iterator();
while (it.hasNext()) {
area.append(it.next() + "\n");
}
}
}); // 注册动作事件监视器
jl.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
if (e.getClickCount() == 2) {
java.util.List<String> values = jl.getSelectedValuesList();
area.setText(""); Iterator<String> it = values.iterator();
while (it.hasNext()) {
area.append(it.next() + "\n");
}
}
} @Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub }
});
} public static void main(String args[]) {
JListTest frame = new JListTest();
frame.setVisible(true);
}
}

二、JComboBox组件

构造方法:

public JComboBox():建立一个没有选项的JComboBox对象。
public JComboBox(Object[] items):利用对象数组构造一个JComboBox对象。
public JComboBox(Vector<?> items):利用Vector构造一个JComboBox对象。
public JComboBox(ComboBoxModel<E> aModel) :创建一个 JComboBox ,从现有的 ComboBoxModel获取其项目。

常用方法:

public void addItem(Object obj):向组合框加选项。
public int getItemCount():获取组合框的条目总数。
public void removeItem(Object ob):删除指定选项。
public void removeItemAt(int index):删除指定索引的选项。
public void insertItemAt(Object ob,int index):在指定的索引处插入选项。
public int getSelectedIndex():获取所选项的索引值(从0开始)。
public Object getSelectedItem():获得所选项的内容。
public void setEditable(boolean b):设为可编辑。组合框的默认状态是不可编辑的,需要调用本方法设定为可编辑,才能响应选择输入事件。

事件:

在JComboBox对象上发生事件分为两类。
一是用户选定项目,属于选项事件,用于获取用户所选的项目,接口是ItemListener,注册监视器的方法是addItemListener(),接口方法是itemStateChanged(ItemEvent e)。

二是用户输入项目后按回车键,属于动作事件,用于读取用户的输入,接口是ActionListener ,注册监视器的方法是addActionListener (),接口方法是actionPerformed(ActionEvent e)。

代码示例:

package com.java.swing;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import javax.swing.*; public class JComboBoxTest extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L; public JComboBoxTest() {
Container cp = this.getContentPane();
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setTitle("下拉列表框");
this.setBounds(0, 0, 350, 200);
cp.setLayout(null); JLabel myLable = new JLabel("请选择课程:");
myLable.setBounds(20, 20, 80, 20);
cp.add(myLable); // 方法一
JComboBox<String> comboBox = new JComboBox<String>();
comboBox.addItem("1java");
comboBox.addItem("1数据结构");
comboBox.addItem("1数据库");
comboBox.addItem("1计算机系统");
comboBox.addItem("1操作系统");
comboBox.addItem("1C语言"); // // 方法二
// String[] contents = { "2java", "2数据结构", "2数据库", "2计算机系统", "2操作系统", "2C语言"};
// JComboBox<String> comboBox = new JComboBox<String>(contents); // // 方法三
// String[] contents = { "3java", "3数据结构", "3数据库", "3计算机系统", "3操作系统", "3C语言"};
// ComboBoxModel<String> model = new DefaultComboBoxModel<String>(contents);
// JComboBox<String> comboBox = new JComboBox<String>(model);
// comboBox.setModel(model); comboBox.setBounds(110, 20, 80, 20);
comboBox.setEditable(true); // 设置为可编辑
cp.add(comboBox); JLabel lblResult = new JLabel("");
lblResult.setBounds(20, 57, 200, 15);
cp.add(lblResult); // 注册选项事件监视器
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e){
lblResult.setText("选择的课程:" + comboBox.getSelectedItem());
}
}); // 注册动作事件监视器
comboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblResult.setText("选择的课程:" + comboBox.getSelectedItem());
}
});
} public static void main(String[] args) {
JComboBoxTest frame = new JComboBoxTest();
frame.setVisible(true);
}
}

java列表组件鼠标双击事件的实现的更多相关文章

  1. IE和Chrome执行javascript对鼠标双击事件的不同响应

    最近在用天地图API帮同学做点开发的工作,主要是基于天地图的API实现违法用地举报的在线地图标绘,要实现的效果如下: 由于是基于天地图API的TPolygonTool工具实现面积量测和多边形绘制功能, ...

  2. EasyUI使用之鼠标双击事件

    easyui鼠标双击事件,使用 onDblClickRow(index, row) 事件,在用户双击一行的时候触发,参数包括: index:点击的行的索引值,该索引值从0开始. row:对应于点击行的 ...

  3. MFC鼠标单击截获鼠标双击事件,且无法记录单击的数据的解决方案

    遇到的问题: 鼠标点击会截断鼠标双击的事件,无法保存椭圆的数据.也就是说双击执行的过程是OnLButtonDown,OnLButtonUp,OnLButtonDblClk,OnLButtonUp.并不 ...

  4. WPF 之 鼠标双击事件

    由于WPF中没有鼠标的双击事件,因而只能通过MouseDown事件来模拟.当连续的两次MouseDown事件的时间间隔,没有超过一个设定的时间阈值时,就计算为一个双击事件,并作相应的处理. 利用WPF ...

  5. java代码实现鼠标双击出现画图-----------paint()方法由系统自动调用,且一定是小写的字母p

    总结:在运行过程中,自己不是很认真,没有检查自己写的代码,结果是无论你怎么运行,双击 frame都没用,因为系统根本就没有调用paint()方法绘图.所以很重要的是实现这个方法 package com ...

  6. Silverlight 鼠标双击 事件

    Silverlight 双击事件例子 <UserControl x:Class="MouseDbClick.MainPage" xmlns="http://sche ...

  7. jqueryEasyUI:tabs扩展:给tabs组件绑定双击事件 分类: JqueryEasyUI 2014-09-29 14:36 537人阅读 评论(0) 收藏

    实现代码: $.extend($.fn.tabs.methods, { /** * 绑定双击事件 * @param {Object} jq * @param {Object} caller 绑定的事件 ...

  8. Unity 如何检测鼠标双击事件

    代码如下: void OnGUI(){ Event e=Event.current; )) Debug.Log("用户双击了鼠标"); }

  9. javascript模拟鼠标双击事件

    通常我们在做开发的时候需要通过单击切换对立事件,简单做了一个模型. <!DOCTYPE html> <html> <head> <title>javas ...

随机推荐

  1. selenium实战:窗口化爬取*宝数据(附源码链接)

    完整代码&火狐浏览器驱动下载链接:https://pan.baidu.com/s/1pc8HnHNY8BvZLvNOdHwHBw 提取码:4c08 双十一刚过,想着某宝的信息看起来有些少很难做 ...

  2. PowerDotNet平台化软件架构设计与实现系列(04):服务治理平台

    系统和系统之间,少不了数据的互联互通.随着微服务的流行,一个系统内的不同应用进行互联互通也是常态. PowerDotNet的服务治理平台发源于早期的个人项目Power.Apix.这个项目借鉴了工作过的 ...

  3. [luogu5344]逛森林

    由于没有删边操作,可以先建出整棵森林,之后再用并查集判断是否连通,若连通必然与最后的森林相同 但如果用树链剖分+线段树的形式来优化建图,更具体如下: 建立两颗线段树,左边从儿子连向父亲,右边从父亲连向 ...

  4. [atARC101E]Ribbons on Tree

    令$f(E')$表示强制$E'$中的边不被覆盖的方案数,根据容斥,$ans=\sum_{E'\subseteq E}(-1)^{|E'|}f(E')$ 对于给定的$E'$,$f(E')$即将$E'$中 ...

  5. Vue: 一个简单的Vue2.0 v-model双向数据绑定的实现,含源代码,小白也能看懂

    首先说一下原理吧 View层(dom元素)的变动如何响应到Model层(Js变量)呢? 通过监听元素的input事件来动态的改变js变量的值,实际上不是改变的js变量的值,而是改变的js变量的gett ...

  6. Netty高性能网络应用框架对标P7面试题分享v4.1.70.Final

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Netty官网 https://netty.io/ 最新版本为4.1.70.Final Netty是一个异步的.事件驱 ...

  7. 用Python画一个八角形代码示例

    import turtle turtle.color("purple","yellow")   turtle.speed(1) turtle.fd(100) t ...

  8. 洛谷 P7520 - [省选联考 2021 A 卷] 支配(支配树)

    洛谷题面传送门 真·支配树不 sb 的题. 首先题面已经疯狂暗示咱们建出支配树对吧,那咱就老老实实建呗.由于这题数据范围允许 \(n^2\)​ 算法通过,因此可以考虑 \(\mathcal O(n^2 ...

  9. Codeforces 590E - Birthday(AC 自动机+Dilworth 定理+二分图匹配)

    题面传送门 AC 自动机有时只是辅助建图的工具,真的 首先看到多串问题,果断建出 AC 自动机.设 \(m=\sum|s_i|\). 不难发现子串的包含关系构成了一个偏序集,于是我们考虑转化为图论,若 ...

  10. Unique Path AGC 038 D

    Unique Path AGC 038 D 考虑如果两个点之间只能有一个边它们就把它们缩起来,那么最后缩起来的每一块都只能是一棵树. 如果两个点之间必须不止一个边,并且在一个连通块,显然无解. 首先把 ...