大家知道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);
}
}
分享到:
相关推荐
- 可以在list_item.xml布局文件中添加CheckBox,并设置其ID以便在代码中引用。 3. **选择模式** - ListView有三种选择模式:NONE(无选择)、SINGLE_CHOICE(单选)和MULTIPLE_CHOICE(多选)。在清单文件或代码...
在ASP.NET开发中,Dropdownlist控件通常用于创建单选下拉列表,而CheckBoxList控件则用于展示可多选的列表项。然而,有时我们需要一个具有多选功能的下拉框,这时可以将Dropdownlist与CheckBoxList结合起来实现这一...
并设置适当的属性,如`ComboBox`的`DroppedDown`属性用于控制下拉框的展开和关闭,`ListBox`的`SelectionMode`设为`SelectionMode.MultiSimple`或`SelectionMode.MultiExtended`以启用多选。 3. **事件处理**: - ...
本示例中,我们将关注"使用List组件的多选功能"来创建一个选课界面,允许用户同时选择多个课程,如OS(操作系统)、DS(数据结构)、DB(数据库)、Java和C++。下面我们将详细探讨如何实现这一功能。 首先,List...
在网页开发中,多选下拉的CheckBoxList是一种常见的用户界面元素,用于提供多个选项让用户进行复选选择。这种功能通常在需要用户选择多个值,且空间有限的情况下使用,例如填写表单或设置偏好时。在ASP.NET环境中,...
在Delphi编程环境中,`TList` 是一个基础且重要的数据结构,用于存储动态数组。在 Delphi 的 VCL(Visual Component Library)框架中,`TList` 类提供了方便的方法来管理和操作对象列表。本教程将通过一个DEMO示例,...
在这个"duilib官方版ListUI多选改进"中,主要关注的是ListUI组件在多选模式下的优化。 ListUI是Duilib中的一个重要控件,它类似于常见的列表视图,可以展示多项数据,并支持用户进行交互,如选择、排序等。在官方的...
### Delphi TList 类详解 #### 一、引言 在 Delphi 开发环境中,`TList` 是一种非常实用且强大的数据结构容器,用于存储一系列对象指针。相较于简单的数组,`TList` 提供了更为丰富的功能,如动态调整大小、排序等...
在ASP中,处理用户输入并展示数据时,下拉框(Dropdown List)是一种常见的控件,尤其在需要用户从预定义选项中选择一个或多个值时。本文将详细介绍ASP下拉框多选控件的实现方法,以及如何在实际项目中应用。 在...
List<string> items = new List<string> { "Option1", "Option2", "Option3" }; checkedListBox.DataSource = items; checkedListBox.DisplayMember = "Value"; ``` 2. 事件处理:CheckedListBox提供了多种事件,如...
当需要支持多选功能时,我们不能直接使用标准的ComboBox,因为默认情况下,ComboBox仅支持单选。不过,通过自定义控件,我们可以实现下拉框的多选功能。这里将详细讲解如何实现这一功能,以及如何结合其他UI元素,如...
在IT行业中,尤其是在Delphi和C++Builder(简称BCB)这样的开发环境中,TList是一个常用的容器类,它用于存储动态数组。`TList`是VCL(Visual Component Library)库的一部分,它允许程序员高效地管理和操作一组对象...
CListUI支持ctrl多选功能,使用方法:将CListUI的成员m_bMutisel设置为true即可,增加了全选功能,调用成员SelectAllItem(true, true);增加了鼠标右键消息的支持,类型为 itemrclick
控件不仅支持绑定常见的List,还支持DataTable和Dictionary, string>,这使得它可以适应各种数据结构,无论是简单的字符串列表还是复杂的数据表格。同时,它允许用户指定不同的值列和显示列,这意味着数据的内部存储...
列出进程工具,可与tasklist同等功效。 tlist -t:以树形结构显示进程列表。 tlist -s:显示每个进程激活的服务。 tlist -p name:返回指定进程的ID号 tlist name:显示该进程的详细信息。
var data = new List[]> { ... }; dataGridView.DataSource = data; dataGridView.SelectionChanged += DataGridView_SelectionChanged; } private void DataGridView_SelectionChanged(object sender, ...
在IT领域,多选列表(Multiple Select List)是一种常见的用户界面元素,用于让用户从一系列选项中选择多个项目。这种交互方式广泛应用于各种软件、网站和应用程序中,为用户提供了一种高效的方式来选择他们感兴趣的...
Tlist是Vim的一个插件,它能提供类似于Source Insight的功能,帮助用户在代码导航方面提高效率。本篇文章将详细介绍如何配置Vim和Tlist,以实现高效、便捷的代码浏览和跳转。 首先,我们需要安装Vim和Ctags。Ctags...
在Android开发中,CheckBox是用户界面(UI)中常见的组件之一,用于提供多选功能。当用户需要在多个选项中进行选择时,CheckBox是理想的选择。这篇内容将深入讲解如何在ListView中集成CheckBox,实现多选功能。 ...
ListView中有一个属性:android:choiceMode,对应三个可选值...* multipleChoice 多选 * none 默认情况,没有选中效果 在ListView的布局中设置了android:choiceMode属性后,item布局需要实现checkable,才有选中效果。