Home > 类库下载 > java类库 > body text

java图形用户界面列表框

高洛峰
Release: 2016-10-20 10:54:35
Original
2238 people have browsed it

java图形用户界面之列表框

      列表框通过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);
    }
}
Copy after login

如上例,只要在初始化JList时将所有元素添加进去即可。

执行结果:列表框不可以被操作。

1.jpg

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
Copy after login

执行结果:

1.jpg

在上面的程序中,对JList的处理过程中用到了JList所支持的事件ListSelectionEvent的getValueIsAdjusting()方法以及JList的getSelectedValuesList()方法,需要注意这两个方法的用法。

(1)Boolean javax.swing.event.ListSelectionEvent.getValueIsAdjusting()

返回此事件是否是仍然在更改的多个不同事件之一,如果此事件是仍然在更改的多个不同事件之一,则返回 true。

例如,对于选择被更新以响应一个用户的拖动的事件,那么在拖动开始时,此属性被设置为 true;在拖动结束时被设置为 false。在拖动期间,监听器接收 valueIsAdjusting 属性设置为 true 的事件。在拖动的最后,当更改终止时,监听器接收一个值设置为 false 的事件。

如果将JList对象的注册程序去掉更新检测的语句:

if(e.getValueIsAdjusting())    return;
Copy after login

输出为:

1.jpg

     可见,没有了更新检测,选中列表框元素后,有重复输出。

 

(2)List javax.swing.JList.getSelectedValuesList()

      JList对象调用getSelectedValuesList()方法,产生一个字符串数组,内容为被选中的元素名称。

3、JList滚动条

      JList本没有对滚动提供直接的支持,我们只要将JList包装进JScrollPane,它将自动帮助处理所有细节。

      总结:JList想添加元素,可以执行将所有元素在JList初始化时加入的静态操作,也可以利用“列表模型”DefaultListModel处理所有列表修改细节的动态操作。

注意:在JList元素选择的过程中可能会用到更新检测,从而确保程序的稳定性。


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact [email protected]
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!