C語言中文網 目錄
首頁 > Java Swing 閱讀:1,474

Java Swing JList:列表框組件

列表框與下拉列表的區別不僅僅表現在外觀上,當激活下拉列表時,會出現下拉列表框中的內容。但列表框只是在窗體系上占據固定的大小,如果需要列表框具有滾動效果,可以將列表框放到滾動面板中。當用戶選擇列表框中的某一項時,按住 Shift 鍵并選擇列表框中的其他項目,可以連續選擇兩個選項之間的所有項目,也可以按住 Ctrl 鍵選擇多個項目。

Swing 中使用 JList 類來表示列表框,該類的常用構造方法如下。
  • JList():構造一個空的只讀模型的列表框。
  • JList(ListModel dataModel):根據指定的非 null 模型對象構造一個顯示元素的列表框。
  • JList(Object[] listData):使用 listData 指定的元素構造—個列表框。
  • JList(Vector<?> listData):使用 listData 指定的元素構造一個列表框。

上述的第一個構造方法沒有參數,使用此方法創建列表框后可以使用 setListData() 方法對列表框的元素進行填充,也可以調用其他形式的構造方法在初始化時對列表框的元素進行填充。常用的元素類型有 3 種,分別是數組、Vector 對象和 ListModel 模型。

例 1

使用 JFmme 組件創建一個窗口,然后使用 JList 類創建一個包含3個選項的列表框。具體實現代碼如下:
package ch17;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
public class JListDemo
{
    public static void main(String[] args)
    {
        JFrame frame=new JFrame("Java列表框組件示例");
        JPanel jp=new JPanel();    //創建面板
        JLabel label1=new JLabel("證件類型:");    //創建標簽
        String[] items=new String[]{"身份證","駕駛證","軍官證"};
        JList list=new JList(items);    //創建JList
        jp.add(label1);
        jp.add(list);
        frame.add(jp);
        frame.setBounds(300,200,400,100);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

上述代碼創建一個包含 3 個元素的字符串數組 items,然后將 items 作為參數來創建列表框。圖 1 所示為實例運行后在列表框中的單選和多選效果。

列表框運行效果
圖1 列表框運行效果

例 2

JList 組件在默認情況下支持單選和多選,可以通過 setSelectionMode() 方法來限制選擇行為。例如,下面的代碼將限制只能在列表框中進行單選操作。
package ch17;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
public class JListDemo1 extends JFrame
{
    public JListDemo1()
    {
        setTitle("Java列表框組件示例");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //設置窗體退出時操作
        setBounds(100,100,300,200);    //設置窗體位置和大小
        JPanel contentPane=new JPanel();    //創建內容面板
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));    //設置面板的邊框
        contentPane.setLayout(new BorderLayout(0, 0));    //設置內容面板為邊界布局
        setContentPane(contentPane);    //應用內容面板
        JScrollPane scrollPane=new JScrollPane();    //創建滾動面板
        contentPane.add(scrollPane,BorderLayout.CENTER);    //將面板增加到邊界布局中央
        JList list=new JList();
        //限制只能選擇一個元素
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        scrollPane.setViewportView(list);    //在滾動面板中顯示列表
        String[] listData=new String[12];    //創建一個含有12個元素的數組
        for (int i=0;i<listData.length;i++)
        {
            listData[i]="這是列表框的第"+(i+1)+"個元素~";    //為數組中各個元素賦值
        }
        list.setListData(listData);    //為列表填充數據
    }
    public static void main(String[] args)
    {
        JListDemo1 frame=new JListDemo1();
        frame.setVisible(true);
    }
}

上述代碼調用了 setSelectionMode() 方法,并指定 ListSelectionModel.SINGLE_SELECTION 常量來限制列表框一次只能選擇一項。該方法還支持如下兩個常量。
  1. ListSelectionModel.SINGLE_INTERVAL_SELECTION:允許選擇一個或多個連續的元素。
  2. ListSelectionModel.MULTIPLE_INTERVAL_SELECTION:允許選擇一個連續的元素。

最終程序的運行效果如圖 2 所示。

限制列表框單選運行效果
圖2 限制列表框單選運行效果

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo