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#

    祝你早日攒够失望,然后开始新的生活。
  • 相关阅读:
    Codeforces Round #649 (Div. 2) D. Ehab's Last Corollary
    Educational Codeforces Round 89 (Rated for Div. 2) E. Two Arrays
    Educational Codeforces Round 89 (Rated for Div. 2) D. Two Divisors
    Codeforces Round #647 (Div. 2) E. Johnny and Grandmaster
    Codeforces Round #647 (Div. 2) F. Johnny and Megan's Necklace
    Codeforces Round #648 (Div. 2) G. Secure Password
    Codeforces Round #646 (Div. 2) F. Rotating Substrings
    C++STL常见用法
    各类学习慕课(不定期更新
    高阶等差数列
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/6815753.html
Copyright © 2011-2022 走看看