`

控制TList的限量多选

阅读更多

大家知道TWaver Java的TList继承自Swing的JList,所以我们可以很容易控制其选择,例如单选、多选等。但是本文介绍如何控制按指定数量进行选择。

人生就是一个不停选择的过程。所以,我们必须要谨慎的控制好你的选择,无论是TList的SelectionModel,还是人生之路。


在实际项目中,我们经常需要对list进行不能超过限定数量的多重选择控制。本文用到的技巧可能是本站最简单的一次了:利用DataBox的SelectionModel,当选择总数超过限定,就将最早的选择删除。

 

 

box.getSelectionModel().addDataBoxSelectionListener(new DataBoxSelectionListener() {
	@Override
	public void selectionChanged(DataBoxSelectionEvent e) {
		if (e.getBoxSelectionModel().size() > max)
			e.getBoxSelectionModel().firstElement().setSelected(false);
		}
	}
});
 

其中max我们可以指定。如果max=1则变成了单选。

通过这个思路,本文写了一个很简单的例子:通过控制多选数量,制作一个简单的点菜选择。相信你的系统中也经常会有类似的场景:通过list让用户选择指定数量的数据。

 

 

package bb.app.leather;

import java.awt.*;
import java.awt.event.*;
import java.util.*;

import javax.swing.*;

import twaver.*;
import twaver.list.*;

public class TestFrame extends JFrame {
	public TestFrame() {
		this.setTitle("TWaver点菜器");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(700, 350);
		TWaverUtil.centerWindow(this);
		JPanel optionPane = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 120));
		final JComboBox cbMax = new JComboBox();
		for (int i = 1; i < 6; i++) {
			cbMax.addItem(i);
		}
		optionPane.add(new JLabel("最多可以点"));
		optionPane.add(cbMax);
		optionPane.add(new JLabel("个菜。    "));
		optionPane.add(new JLabel("您点的菜:"));
		final JLabel lbOptions = new JLabel("          ");
		optionPane.add(lbOptions);
		JButton btnOption = new JButton("点菜");
		optionPane.add(btnOption);
		btnOption.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				ArrayList<String> options = pickOption((Integer) cbMax.getSelectedItem());
				String text = "";
				for (String option : options) {
					text += option + "  ";
				}
				lbOptions.setText(text);
			}
		});
		this.getContentPane().add(optionPane, BorderLayout.CENTER);
	}

	private ArrayList<String> pickOption(final int max) {
		String[] options = {
				"回锅肉",
				"宫保鸡丁",
				"京酱肉丝",
				"红烧鸡杂",
				"红烧大肠",
				"青椒炒蛋",
				"西红柿炒蛋",
		};

		TDataBox box = new TDataBox();
		for (String option : options) {
			ResizableNode node = new ResizableNode();
			node.setName(option);
			box.addElement(node);
		}
		box.getSelectionModel().addDataBoxSelectionListener(new DataBoxSelectionListener() {
			@Override
			public void selectionChanged(DataBoxSelectionEvent e) {
				if (e.getBoxSelectionModel().size() > max) {
					e.getBoxSelectionModel().firstElement().setSelected(false);
				}
			}
		});
		TList list = new TList(box);
		list.setTListSelectionMode(TList.CHECK_SELECTION);
		list.setIconVisible(false);
		JScrollPane scroll = new JScrollPane(list);
		Object[] message = new Object[] { "您要吃点什么?注意:最多只能点" + max + "个菜哦!", scroll };
		int answer = JOptionPane.showConfirmDialog(this, message, "点菜", JOptionPane.OK_CANCEL_OPTION);
		ArrayList<String> result = new ArrayList<String>();
		if (answer == JOptionPane.OK_OPTION) {
			Iterator it = box.getSelectionModel().selection();
			while (it.hasNext()) {
				result.add(((Element) it.next()).getName());
			}
		}
		return result;
	}

	public static void main(String[] args) throws Exception {
		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		TestFrame ui = new TestFrame();
		ui.setVisible(true);
	}
}

 

分享到:
评论

相关推荐

    android list View多选

    - 可以在list_item.xml布局文件中添加CheckBox,并设置其ID以便在代码中引用。 3. **选择模式** - ListView有三种选择模式:NONE(无选择)、SINGLE_CHOICE(单选)和MULTIPLE_CHOICE(多选)。在清单文件或代码...

    asp.net Dropdownlist结合CheckBoxList多选下拉框

    在ASP.NET开发中,Dropdownlist控件通常用于创建单选下拉列表,而CheckBoxList控件则用于展示可多选的列表项。然而,有时我们需要一个具有多选功能的下拉框,这时可以将Dropdownlist与CheckBoxList结合起来实现这一...

    CheckBoxList_WinForm多选下拉框_下拉多选_

    并设置适当的属性,如`ComboBox`的`DroppedDown`属性用于控制下拉框的展开和关闭,`ListBox`的`SelectionMode`设为`SelectionMode.MultiSimple`或`SelectionMode.MultiExtended`以启用多选。 3. **事件处理**: - ...

    使用List组件的多选功能

    本示例中,我们将关注"使用List组件的多选功能"来创建一个选课界面,允许用户同时选择多个课程,如OS(操作系统)、DS(数据结构)、DB(数据库)、Java和C++。下面我们将详细探讨如何实现这一功能。 首先,List...

    多选下拉的CheckBoxList

    在网页开发中,多选下拉的CheckBoxList是一种常见的用户界面元素,用于提供多个选项让用户进行复选选择。这种功能通常在需要用户选择多个值,且空间有限的情况下使用,例如填写表单或设置偏好时。在ASP.NET环境中,...

    delphi Tlist使用方法举例

    在Delphi编程环境中,`TList` 是一个基础且重要的数据结构,用于存储动态数组。在 Delphi 的 VCL(Visual Component Library)框架中,`TList` 类提供了方便的方法来管理和操作对象列表。本教程将通过一个DEMO示例,...

    duilib官方版ListUI多选改进

    在这个"duilib官方版ListUI多选改进"中,主要关注的是ListUI组件在多选模式下的优化。 ListUI是Duilib中的一个重要控件,它类似于常见的列表视图,可以展示多项数据,并支持用户进行交互,如选择、排序等。在官方的...

    delphi Tlist详解

    ### Delphi TList 类详解 #### 一、引言 在 Delphi 开发环境中,`TList` 是一种非常实用且强大的数据结构容器,用于存储一系列对象指针。相较于简单的数组,`TList` 提供了更为丰富的功能,如动态调整大小、排序等...

    ASP下拉框多选控件及使用方法

    在ASP中,处理用户输入并展示数据时,下拉框(Dropdown List)是一种常见的控件,尤其在需要用户从预定义选项中选择一个或多个值时。本文将详细介绍ASP下拉框多选控件的实现方法,以及如何在实际项目中应用。 在...

    winform-下拉框多选

    List&lt;string&gt; items = new List&lt;string&gt; { "Option1", "Option2", "Option3" }; checkedListBox.DataSource = items; checkedListBox.DisplayMember = "Value"; ``` 2. 事件处理:CheckedListBox提供了多种事件,如...

    c# 下拉框多选实例

    当需要支持多选功能时,我们不能直接使用标准的ComboBox,因为默认情况下,ComboBox仅支持单选。不过,通过自定义控件,我们可以实现下拉框的多选功能。这里将详细讲解如何实现这一功能,以及如何结合其他UI元素,如...

    TList查询,查找!

    在IT行业中,尤其是在Delphi和C++Builder(简称BCB)这样的开发环境中,TList是一个常用的容器类,它用于存储动态数组。`TList`是VCL(Visual Component Library)库的一部分,它允许程序员高效地管理和操作一组对象...

    duilib中CListUI支持多选功能

    CListUI支持ctrl多选功能,使用方法:将CListUI的成员m_bMutisel设置为true即可,增加了全选功能,调用成员SelectAllItem(true, true);增加了鼠标右键消息的支持,类型为 itemrclick

    C#重定义的下拉多选控件,支持显示多列、单选/多选,文件中附有源码

    控件不仅支持绑定常见的List,还支持DataTable和Dictionary, string&gt;,这使得它可以适应各种数据结构,无论是简单的字符串列表还是复杂的数据表格。同时,它允许用户指定不同的值列和显示列,这意味着数据的内部存储...

    tlist_列出进程工具tlist

    列出进程工具,可与tasklist同等功效。 tlist -t:以树形结构显示进程列表。 tlist -s:显示每个进程激活的服务。 tlist -p name:返回指定进程的ID号 tlist name:显示该进程的详细信息。

    C#用DataGridView实现多选表格

    var data = new List[]&gt; { ... }; dataGridView.DataSource = data; dataGridView.SelectionChanged += DataGridView_SelectionChanged; } private void DataGridView_SelectionChanged(object sender, ...

    多选列表的demo

    在IT领域,多选列表(Multiple Select List)是一种常见的用户界面元素,用于让用户从一系列选项中选择多个项目。这种交互方式广泛应用于各种软件、网站和应用程序中,为用户提供了一种高效的方式来选择他们感兴趣的...

    vim环境的配置——模仿sourceInsight功能的Tlist

    Tlist是Vim的一个插件,它能提供类似于Source Insight的功能,帮助用户在代码导航方面提高效率。本篇文章将详细介绍如何配置Vim和Tlist,以实现高效、便捷的代码浏览和跳转。 首先,我们需要安装Vim和Ctags。Ctags...

    CheckBox多选功能的实现

    在Android开发中,CheckBox是用户界面(UI)中常见的组件之一,用于提供多选功能。当用户需要在多个选项中进行选择时,CheckBox是理想的选择。这篇内容将深入讲解如何在ListView中集成CheckBox,实现多选功能。 ...

    androidstudio最新版 实现ListView单选、多选效果最实用案例 亲试可用

    ListView中有一个属性:android:choiceMode,对应三个可选值...* multipleChoice 多选 * none 默认情况,没有选中效果 在ListView的布局中设置了android:choiceMode属性后,item布局需要实现checkable,才有选中效果。

Global site tag (gtag.js) - Google Analytics