JList的使用(筆記整理)


構造簡單的JList

利用ListModel構造JList

建立有圖像的JList

JList的事件處理

JList的使用

  • JList與JCheckBox的使用比較類似可以選取一至多項,JList可以整列選取
  • 第三種構造函數無法改變項目的數量

   

--構造一個簡單的JList

 

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;

public class JList01 {
    
    public static void main(String[] args) {
        JFrame f=new JFrame();
        Container contentpane=f.getContentPane();
        f.setLayout(new GridLayout(1, 2));
        String[] s=new String[]{"日本","英國","法國","中國","美國"};
        Vector v=new Vector();
        v.addElement("nokia 8850");
        v.addElement("nokia 8250");
        v.addElement("notorola v8088");
        v.addElement("motorola v3688");
        v.addElement("panasonic GD92");
        v.addElement("其他");
        
        JList jList=new JList(s);
        jList.setBorder(BorderFactory.createTitledBorder("您最喜歡到哪個國家玩呢"));
        
        JList jList2=new JList(v);
        jList2.setBorder(BorderFactory.createTitledBorder("你最喜歡哪部手機呢"));
        contentpane.add(new JScrollPane(jList));
        contentpane.add(new JScrollPane(jList2));
        contentpane.add(jList2);
        f.pack();
        f.show();
        f.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
            
        });
    }
}

 

在這個窗口中,當窗口變小時,list沒有滾動的效果,標紅的代碼段可以展示這個效果

*選擇模式(Selection Mode)

設置選擇模式可以用JList所提供的setSelectionMode方法(int selectionMode)

 

--利用ListModel構造JList

在實際操作中可以繼承AbstractListModel這個抽象類,

 1 public class JList03 {
 2 
 3     public JList03(){
 4         JFrame f=new JFrame("JList03");
 5         Container contentpane=f.getContentPane();
 6         
 7         ListModel mode=new DataModel();
 8         JList list=new JList(mode);
 9         list.setBorder(BorderFactory.createTitledBorder("您最喜歡到哪個國家玩呢"));
10         
11         contentpane.add(new JScrollPane(list));
12         f.pack();
13         f.show();
14         f.addWindowListener(new WindowAdapter() {
15 
16             @Override
17             public void windowClosing(WindowEvent e) {
18                 // TODO Auto-generated method stub
19                 System.exit(0);
20             }
21             
22         });
23     
24     }
25     public static void main(String[] args) {
26         new JList03();
27     }
28 }
29 class DataModel extends AbstractListModel{
30 
31     String[] s={"美國","日本","中國","英國","法國","意大利","澳洲","韓國"};
32     @Override
33     public Object getElementAt(int index) {
34         // TODO Auto-generated method stub
35         return (index+1)+"."+s[index++];
36     }
37     @Override
38     public int getSize(){
39         return s.length;
40     }
41 
42     
43 }

*事實上,Java還提供了DefaultListModel這個類,它繼承了前一個類,並實現了所有的抽象方法。

--建立有圖像的JList

要在JList上加入icon,我們就要先了解一下ListCellRenderer這個接口。
我們先要了解一下這個方法。
*要想在這個JList上加入icon圖像重要的一點是把JList的每一個項目當成JLabel
代碼過程略

--JList的事件處理

     JList的事件處理分為兩種:一是取得用戶選取的項目;二是在JList的項目上單擊兩次,運行相對應的動作。

  1. 繼承ListSelectionListener interface

在JList這個類中有addListSelectionListener這個方法,可以檢測用戶對list的選取有任何改變

model2=new DataModel(2);
        list2=new JList(model2);
        list2.setBorder(BorderFactory.createTitledBorder("您最喜歡到哪個國家玩呢"));
        list2.addMouseListener(this);
View Code

 DefaultListModel ,它在jdk中是這樣解釋的:此類以松散方式實現 java.util.Vector API,它實現 1.1.x 版本的 java.util.Vector

沒有 collection 類支持,並且在發生更改時通知 ListDataListener。目前,它委托給一個 Vector,在將來的版本中,它將是一個真正的 Collection 實現。

**方法解釋locationToIndex

public int locationToIndex(Point location)
返回最接近列表的坐標系統中給定位置的單元索引。要確定單元是否實際包含指定的位置,需要將該點與單元的邊界進行比較,邊界由 getCellBounds 提供。如果模型為空,則此方法返回 -1

此方法是委托給列表的 ListUI 中同名方法的覆蓋方法。如果列表沒有 ListUI,則它返回 -1

 

參數:
location - 點的坐標
返回:
接近給定位置的單元索引或 -1

     2. MouseListener interface


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM