Jlist的用法

    JList从含义上看是一个列表,有点和JComboBox相似。其实不然,JComboBox的内容只能用一列显示出来,而JList的内容可以多列显示。

一,构造方法:见例子

String[] words= { "quick", "brown", "hungry", "wild"};
JList wordList = new JList(words);

参数为对象数组。

二,使用如下方法实现Jlist的多列显示:

setLayoutOrientation(参数);

参数默认为:

①JList.VERTICAL:用一列来显示,但不会自动滚动,需要添加滚动面板才能出现滚动条。

:setVisibleRowCount(n);方法可以设置最多显示多少行(若没有添加滚动面板,此设置无效,所有内容均会显示)。

②JList.VERTICAL_WRAP:在保证行数不超过setVisibleRowCount(n)的情况下纵向排列元素。

:此时滚动面板无效,因为行数永远不可能超标,因此滚动面板也永远不会出现。

③JList.HORIZONTAL_WRAP:同上不过是横向排列元素。

import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JList;
public class test{
    public static void main(String[] args) {
        // TODO Auto-generated method stub
            JFrame frame;
            String [] words={"first","second","third","forth","fifth"};
            JList list=new JList(words);
        frame=new JFrame("test");
        frame.setSize(500, 500);
        frame.setVisible(true);
            list.setFont(new Font(null, 0, 30));
            list.setVisibleRowCount(3);//最多显示三行!!!!!!!
            list.setLayoutOrientation(JList.VERTICAL_WRAP);
        frame.add(list);
    }
}

三,事件的处理

他处理的是ListSelectionEvent事件,监听器为ListSelectionListener

在这个事件处理过程中,将鼠标的操作分为2种状态:

1.按下鼠标不松手,在各个元素间拖动;

2.松开鼠标

:当你按下鼠标后,会触发一个事件,拖动到另一个控件,又触发一个事件,继续拖动则继续触发事件,最后松手,触发一个事件。

如何区分这2种情况呢?

ListSelectionEvent提供了一个方法getValueIsAdjusting(),如果该方法返回true,则代表情况1;反之代表情况2。

注意:JList控件不提供鼠标双击元素的处理事件,若要处理鼠标双击的情况,则应该添加鼠标监听器,代码如下:

public void mouseClicked(MouseEvent evt)
{
   if (evt.getClickCount() == 2)
   {
      JList source = (JList) evt.getSource();
      Object[] selection = source.getSelectedValues();
      doAction(selection);
   }
}

四,以ListModel方式创建JList

    数据模型顾名思义是负责显示数据的,也就是说JList的数据都是从这个模型里取的,数据模型在swing中是比较经典的用法,很多重要的组件都有对应的数据模型mode

数据模型分为两种:

一种是继承AbstractListModel,一种是DefaultListModel

    public class t {  
        public static void main(String[] args) {  
            JFrame f = new JFrame();  
            f.setSize(600, 500);  
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
            JPanel panel = new JPanel();  
            JScrollPane scrollPane = new JScrollPane();  
            scrollPane.setPreferredSize(new Dimension(200,100));  
            //以数据模型构造方法创建  
            final JList jList = new JList(new MyListModel());  
            jList.addListSelectionListener(new ListSelectionListener(){  
                @Override  
                public void valueChanged(ListSelectionEvent e) {  
                    if(!jList.getValueIsAdjusting()){   //设置只有释放鼠标时才触发  
                        System.out.println(jList.getSelectedValue());  
                    }  
                }  
            });  
              
              
            scrollPane.setViewportView(jList);  
            panel.add(scrollPane);  
            f.getContentPane().add(panel);  
            f.setVisible(true);  
        }  
    }  
    //列表数据模型  
    class MyListModel extends AbstractListModel{  
      
        @Override  
        public Object getElementAt(int index) {  
            // TODO Auto-generated method stub  
            return index;  
        }  
          
        @Override  
        public int getSize() {  
            // TODO Auto-generated method stub  
            return 100;  
        }  
    }  
    public class t {  
        public static void main(String[] args) {  
            JFrame f = new JFrame();  
            f.setSize(600, 500);  
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
            JPanel panel = new JPanel();  
            JScrollPane scrollPane = new JScrollPane();  
            scrollPane.setPreferredSize(new Dimension(200,100));  
            final DefaultListModel d = new DefaultListModel();//只有默认的模型有添加/删除方法  
            d.addElement("aa");  
            d.addElement("bb");  
            final JList jList = new JList(d);  
            jList.addListSelectionListener(new ListSelectionListener(){  
                @Override  
                public void valueChanged(ListSelectionEvent e) {  
                    if(!jList.getValueIsAdjusting()){   //设置只有释放鼠标时才触发  
                        System.out.println(jList.getSelectedValue());  
                    }  
                }  
            });  
              
              
            scrollPane.setViewportView(jList);  
            panel.add(scrollPane);  
            f.getContentPane().add(panel);  
            f.setVisible(true);  
        }  
    }  

转自:

http://bbs.csdn.net/topics/350130389

http://blog.csdn.net/he_chenjun/article/details/9128965#

祝你早日攒够失望,然后开始新的生活。
原文地址:https://www.cnblogs.com/LuRenJiang/p/6815753.html