zoukankan      html  css  js  c++  java
  • 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#

    祝你早日攒够失望,然后开始新的生活。
  • 相关阅读:
    设计模式学习笔记-观察者模式(转)
    VC++ 遍历文件夹
    VC++文件监控 ReadDirectoryChangesW
    Windows Socket五种I/O模型——代码全攻略(转)
    CentOS 6 安装RabbitMQ
    nginx tomcat负载配置
    Centos6 Nginx安装
    windows 安装MongoDB服务
    跟导师请教后写出的关于C#导出Excel,不导出隐藏列的方法
    linux 常用命令(四)——(centos7-centos6.8)Vim安装
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/6815753.html
Copyright © 2011-2022 走看看