JAVA第三次作業——Swing組件中JList的運用

0x00  簡述

Swing是GUI(圖形用戶界面)開發工具包,內容豐富,簡單易用,所以本篇文章中只編寫Swing中的Jlist組件,其他Swing中的組件相關內容這裏筆者就不介紹了,文章中未涉及的組件讀者請自行去查閱相關資料。


0x01  Jframe框架

九層之臺,起於累土,我們的程序也是如此,要先從地基打起,Jframe就是我們的地基。
JFrame是一個容器,它是各種Swing組件的前置條件,所有的Swing組件都在這上面呈現。下面是一個簡單的Jframe例子:

import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class JframeTest {

    public void CreateJFrame() {
        JFrame jf = new JFrame("JframeTest");        // 設置窗口標題
        jf.setVisible(true);        // 設置窗體可視
        jf.setSize(400, 400);        // 設置窗體大小
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);        
    }

    public static void main(String[] args) {
        new JframeTest().CreateJFrame();        
    }
}

運行後如圖所示
在這裏插入圖片描述
這樣,我們就有了一個可以用來展示的窗口,接下來我們開始詳細介紹Jlist組件的用法。


0x02  構造一個簡單的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.*;

public class JList1 {

    public static void main(String[] args) {
        JFrame f=new JFrame("JListTest");
        Container contentpane=f.getContentPane();
        f.setVisible(true);        // 設置窗體可視
        f.setSize(400, 400);        // 設置窗體大小
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(2, 1));		      	//設置列表行和列數
        String[] s=new String[]{"面向對象程序設計","數據結構","毛澤東思想和中國特色社會主義理論體系概論","離散數學","大學物理"};
        Vector v=new Vector();
        v.addElement("周景");
        v.addElement("何可可");
        v.addElement("莫陽生");
        v.addElement("朱永嬌");
        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) {
                System.exit(0);
            }

        });
    }
}

運行後如圖所示
在這裏插入圖片描述

在上述代碼中,我們可以看到JList既可以用數組Object[]也可以用集合Vector<?>方法來創建。而用集合方法創建的列表無法改變項目的數量。
由於直接創建的列表沒有滾動條,會對用戶的使用產生麻煩,所以上面的列表都是在作爲 JScrollPane 的視口視圖下實現的。


0x03  爲選項添加相應動作

當用戶選中其中一項時,我們想讓用戶瞭解一些關於選中項目的一些信息,這時候就要用上監聽器

        jList.addMouseListener(new MouseAdapter() //列表框添加鼠標事件
        {
            public void mousePressed(MouseEvent e)
            {


                int i = jList.getSelectedIndex() + 1;
                Object path[] = v.toArray();
                if(i == 1)
                {
                    jList.setBackground(Color.white); //設置背景色
                    System.out.println("已選擇第" + i + "項");
                }
                if(i == 2)
                {
                    jList.setBackground(new Color(183,83,168));
                    System.out.println("已選擇第" + i + "項");
                }
                if(i == 3)
                {
                    jList.setBackground(new Color(245, 129, 35));
                    System.out.println("已選擇第" + i + "項");
                }
                if(i == 4)
                {
                    jList.setBackground(new Color(108,72,78));
                    System.out.println("已選擇第" + i + "項");
                }
                if(i == 5)
                {
                    jList.setBackground(new Color(46, 129, 48));
                    System.out.println("已選擇第" + i  + "項");
                }

            }
        }


運行後如圖所示
在這裏插入圖片描述

由於筆者水平有限暫無法修改JList背景圖片,筆者在這隻能將就修改其背景顏色,如讀者技術高超或感興趣的話,可以參考小結中給予的鏈接。
通過爲每個選項添加監聽器的方法,我們改變了背景顏色來提醒用戶,控制檯輸出相應數據來爲程序下一步動作提供條件。


0x04  小結

本章專門介紹了JList的使用方法,JList和JCombobox組件從本質上說是類似的,它們都是提供了一系列列表數據供用戶選擇,從表現形式上可以把JCombobox看做一個JList和一個JTextField組成,通過callback機制回調選擇項目。JList並沒有複雜的UI,當然也就沒有複雜的畫面了,所以對於提高JList的畫面表現,一般需要繼承ListCellRenderer加入自己的表現樣式,當然筆者在查閱相關方法時已神志不清,故未在文中實現,實屬可惜。

參考及引用:
JList (Java Platform SE 6)官方介紹
JList控件使用圖片+文字
JList的使用和事件相應
我的老師周景
筆者的網站

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章