列表框通过Swing组件JList产生,其总是在屏幕上占据固定行数的空间。如果要得到列表框中被选中的元素,只需调用getSelectedValuesList(),它可以产生一个字符串数组,内容为被选中的元素名称。JList组件允许多重选择;如果按住Ctrl键,可以选中所有点击的元素;如果选中一个元素,按住Shift键并单击另一个元素,那么这两个元素之间的所有元素都被选中;要从选中的元素中去掉一个,按住Ctrl键单击该元素即可。
初始化列表框后,接着便是向列表框添加和修改内容。分为静态操作和动态操作。
1、静态操作
静态操作便是将所有元素同时添加到JList中,添加后不能修改,不能删除,即在程序执行过程中不能操作列表框。
E.g.
package test; import javax.swing.*; import java.awt.*; import static net.mindview.util.SwingConsole.*; public class ListTest1 extends JFrame{ private String[] str = {"Monday","Tuesday","Wednesday","Thursday","Friday","Staturday","Sunday"}; private JList list;public ListTest1() { list = new JList(str); setLayout(new FlowLayout()); add(list); } public static void main(String[] args) { run(new ListTest1(),200,100); } }
如上例,只要在初始化JList时将所有元素添加进去即可。
执行结果:列表框不可以被操作。
2、动态操作
通过查看JList的方法,可以发现JList不负责列表框的动态操作,所有的动态操作的细节可以在“列表模型”即DefaultListModel中完成,只需将该列表模型加入JList即可。
DefaultListModel listmodel = new DefaultListModel(); listmodel.addElement(element1);//添加元素 listmodel.clear();//清除全部元素 listmodel.remove(int index);//清除指定位置的元素
E.g.
package test; import java.awt.*;import java.awt.event.*;import static net.mindview.util.SwingConsole.*; import javax.swing.*; import javax.swing.border.Border; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class ListTest extends JFrame{ private String[] str = {"Monday","Tuesday","Wednesday","Thursday","Friday","Staturday","Sunday"}; private JButton button1 = new JButton("Add Item"), button2 = new JButton("Clear Item"); private JTextArea text = new JTextArea(str.length,20); private DefaultListModel listmodel = new DefaultListModel(); private JList list = new JList(listmodel); //将列表模型加入JList,列表模型负责完成动态操作,JList负责创建列表以及许多其它工作(如多重选择)。 private int count = 0; private boolean flag = false; public ListTest() { text.setEditable(false);//只是用来显示,不能编辑 for(int i = 0;i<4;i++) { listmodel.addElement(str[count++]); } button1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { if(count<str.length) { listmodel.addElement(str[count++]); }else { button1.setEnabled(flag); flag = true; } } }); button2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { if(count<str.length) { count = 0;//列表重新开始html" target="_blank">添加元素 listmodel.clear();//列表元素清除 text.setText(null); }else { count = 0; listmodel.clear(); text.setText(null); button1.setEnabled(flag);//启动按钮 } } }); list.addListSelectionListener(new ListSelectionListener(){ @SuppressWarnings("deprecation") public void valueChanged(ListSelectionEvent e) { if(e.getValueIsAdjusting()) return; //如果检测到事件在更改,则返回true,后面语句不执行;当更改结束后,则返回false,执行后面语句。 for(Object item : list.getSelectedValuesList()) { text.append(item + "\n");//List型对象转换为Object } //list调用getSelectedValuesList()方法,产生一个字符串数组,内容为被选中的元素名称 } }); setLayout(new FlowLayout()); Border border = BorderFactory.createMatteBorder(1, 1, 2, 2, Color.RED);//添加边框 list.setBorder(border);//设置边框 text.setBorder(border); add(button1); add(button2); add(new JScrollPane(text)); add(list); } public static void main(String[] args) { run(new ListTest(),250,375); } }
执行结果:
在上面的程序中,对JList的处理过程中用到了JList所支持的事件ListSelectionEvent的getValueIsAdjusting()方法以及JList的getSelectedValuesList()方法,需要注意这两个方法的用法。
(1)Boolean javax.swing.event.ListSelectionEvent.getValueIsAdjusting()
返回此事件是否是仍然在更改的多个不同事件之一,如果此事件是仍然在更改的多个不同事件之一,则返回 true。
例如,对于选择被更新以响应一个用户的拖动的事件,那么在拖动开始时,此属性被设置为 true;在拖动结束时被设置为 false。在拖动期间,监听器接收 valueIsAdjusting 属性设置为 true 的事件。在拖动的最后,当更改终止时,监听器接收一个值设置为 false 的事件。
如果将JList对象的注册程序去掉更新检测的语句:
if(e.getValueIsAdjusting()) return;
输出为:
可见,没有了更新检测,选中列表框元素后,有重复输出。
(2)List javax.swing.JList.getSelectedValuesList()
JList对象调用getSelectedValuesList()方法,产生一个字符串数组,内容为被选中的元素名称。
3、JList滚动条
JList本没有对滚动提供直接的支持,我们只要将JList包装进JScrollPane,它将自动帮助处理所有细节。
总结:JList想添加元素,可以执行将所有元素在JList初始化时加入的静态操作,也可以利用“列表模型”DefaultListModel处理所有列表修改细节的动态操作。
注意:在JList元素选择的过程中可能会用到更新检测,从而确保程序的稳定性。
以上所述是小编给大家介绍的java图形用户界面之列表框,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
所以我必须快速构建这个JavaFX应用程序,我的代码编译了,但是图形用户界面没有启动,我得到了异常。一旦实现FileChooser代码,问题就会开始。 FXML文件如下所示: 我完全是JavaFX的新手。任何提示都很感激。P. S.我正在使用胶粘场景生成器。 谢谢。 例外: 应用程序启动方法中的异常线程“main”java中的异常。lang.RuntimeException:com上应用程序启动方
本节介绍如何创建Python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口。 目前支持Python的所谓"GUI工具包"有很多,但没有一个被认为是标准的,也好,选择空间大 GUI工具包: 工具包名 介绍 URL地址 Tkinter 使用Tk平台。很容易得到。半标准 http://wiki.python.org/moin/TkInter wxpython 基于wxWindows。跨平
8.1 图形用户界面概述
第 8 章 图形用户界面 随着 Windows 之类的图形化操作系统的产生和发展,如今用户在与计算机打交道时基本 上都使用形象直观、简单易学的图形化方式,即通过鼠标点击菜单、命令按钮等图形化元素 来向应用程序发出命令,而应用程序也以消息框、对话框等图形化元素来向用户显示各种信 息。因此,为程序建立图形化的用户界面已经成为当今程序设计必备的基本技术之一。本章 介绍图形用户界面的设计和实现,具体内容包
UnityGUI is the GUI creation system built into Unity. It consists of creating different Controls, and defining the content and appearance of those controls. Unity图形用户界面是固化在Unity中的图形用户界面系统。它含有创建不同控件和定义
为了使用Rexx中提供的图形用户界面,需要使用2个包,一个称为ActiveTcl ,另一个称为Rexxtk包。 除了这两个包之外,还可以设计普通表单,这些表单可以在表单上有按钮和其他控件。 环境设置 (Environment Setup) 首先要做的是环境设置。 让我们通过以下步骤来确定环境。 Step 1 - 从以下网站下载Activetcl软件包 - https://www.activesta