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();
}
}
運作後如圖所示
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YscjMfVmepNHL9cGRNlXTq1keJRkW6ZkMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL0cjM2EzNykTM2IDMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
這樣,我們就有了一個可以用來展示的視窗,接下來我們開始詳細介紹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的使用和事件相應
我的老師周景
筆者的網站